[解決済み] git merge origin/masterとgit pullの違いについて
質問
私はローカルブランチ "BDD-local" で作業しており、他の開発者から変更を取得したいと考えています。 他の開発者は自分のブランチを使用しており、ユニットテストに満足したら、リモートリポジトリ(origin/master)に変更をプッシュしています。
私はここでいくつかの投稿に目を通し、相反する情報を得ました。 を使うことについて話している人はほとんどいません。
git fetch origin
git merge origin/master
他の人は、'git pull' が変更を取得するはずだと考えています。
ある開発者が、'git fetch' なしで 'git merge origin/master' を使いたいと言ってきました。
どなたか、どちらのオプションが良いかご存知の方はいらっしゃいますか?ローカルブランチで 'git pull' を試しましたが、うまくいかないようです。しかし、ローカルの master で 'git pull' を実行するとうまくいきます (ただし、ローカルブランチで動作するようにしたいのです)。
どうすればいいですか?
フェッチ、マージ、プル
git fetch
と
git merge origin/master
は、リモートの変更を取り込み、統合します。 オリジン/マスターがCにあり、誰かがDをプッシュし、あなたはEとFで作業しました。
git fetch
.
origin/master
v
A-B-C-E-F < master
\
(D) < master on remote
次に
git fetch
. これでDを見ることができ、origin/masterは追跡しているリモートリポジトリと一致するように更新されています。
A-B-C-E-F < master
\
D < origin/master, master on remote
次に
git merge
このようになります。
A-B-C-E-F
\ \
D---G < master
^
origin/master, master on remote
これで、master (E, F) での変更と origin/master (D) での新しいコミットの統合が完了しました。
git pull
は、上記の手順の単なるショートカットです。
フェッチしない git merge
実行中
git merge origin/master
を使用せずに
git fetch
は無意味です。 がなければ
git fetch
の場合、ローカルリポジトリはリモートリポジトリの変更の可能性に気付かず、オリジン/マスターは移動しません。 つまり、Dがリモート上にのみ存在し、ローカルには存在しない、この状態になるわけです。
origin/master
v
A-B-C-E-F < master
\
(D) < master on remote
ローカルリポジトリにはDがないので
git merge origin/master
は単に降伏します。
Already up-to-date.
なぜなら、あなたのローカルリポジトリに関する限り、master はすでに origin/master にあるものをすべて持っているからです。
何がいいのか?
上記のどれでもない。:)
git fetch
git rebase origin/master master
またはショートカット
git pull -r
しかし、個人的には、リベースの前に変更点を確認する方が好きです。
これは、master (E, F) での変更を origin/master (D) の上で、やばいマージコミットをせずに再生します。 これは、次のような結果をもたらします。
A-B-C-D-E'-F' < master
^
origin/master, master on remote
すべてが1行にまとめられ、プッシュする準備ができ、履歴が友情のブレスレットのように見えないことに注目してください。
ひとつだけ警告があります。すでにプッシュされているコミットは決してリベースしないでください。 リベースの結果、E & F が E' & F' になったことに注意しましょう。 このコミットは完全に書き直され、新しい SHA も含めてすべてです。 すでに公開されているコミットをリベースすると、開発者がプルしたときに履歴が書き直されることになります。 そしてそれはひどいもので、誰もがあなたに邪悪な目を向け、あなたを敬遠するでしょう。
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] git add -A」と「git add .」の違い。
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] リモートにないトラッキングブランチを削除
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】Gitマージで「すでに最新」と報告されるが、違いはある
-
git revert 複数コミット
-
[解決済み】ローカルGitブランチとそのリモートブランチを比較する方法
-
[解決済み】gpgがデータの署名に失敗した fatal: failed to write commit object [Git 2.10.0].
-
[解決済み] このリポジトリで別の git プロセスが実行されているようです。
-
[解決済み] SourceTree error:1407742E:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1警告プロトコルバージョン
-
[解決済み] 警告: リモート HEAD は存在しない参照元を参照しているため、チェックアウトできません。
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。