2 人のユーザーが同じリモート ブランチを追跡しているブランチで作業していて、1 人が最初にプッシュした場合、2 人目は他の人の変更でブランチを更新するまでプッシュできません。
では、私が 2 人目の場合、プルを行った後、私の履歴はどうなりますか? 私は単一のマージコミットを取得しますか?それともリベースを行い、他の人が行ったことの最後に変更を加えますか?
前者の場合、私のブランチがリモート ブランチを追跡していても、実際には別の履歴があるということではないでしょうか?
2 人のユーザーが同じリモート ブランチを追跡しているブランチで作業していて、1 人が最初にプッシュした場合、2 人目は他の人の変更でブランチを更新するまでプッシュできません。
では、私が 2 人目の場合、プルを行った後、私の履歴はどうなりますか? 私は単一のマージコミットを取得しますか?それともリベースを行い、他の人が行ったことの最後に変更を加えますか?
前者の場合、私のブランチがリモート ブランチを追跡していても、実際には別の履歴があるということではないでしょうか?
変更をどのように取り込むかによって異なります
実行すると、ローカル ブランチとリモート ブランチのマージgit pull
コミットが行われます。
実行git pull --rebase
すると、変更がリモートで発生した変更の後に移動されます。
マニュアルごとhttp://git-scm.com/docs/git-pull
pull
git fetch
とgit merge
コマンドを組み合わせたものです。--rebase
2番目のコマンドに変更を追加するgit rebase
どちらの場合も、ローカルにコミット (および場合によってはマージ コミット) があるため、履歴はリモートの履歴とは異なります。これが、「X コミットよりも進んでいる」というステータスが表示される理由です。プッシュするまで、その場合、リモートとローカルの履歴は同じになります...他の誰かがプッシュするまで。
そのgit pull
場合、 で履歴を見るとしたらgit log --graph
. コミットの前に履歴が分割されていることがわかります (これは、その時点でリモートから行った最後のコミットです)。次に、2 番目の人のコミットを示すブランチと、あなたのコミットを示すブランチがあります。これらのブランチは、「ブランチ マスターをマスターにマージする」などの 3 回目のコミットで参加します。これは、ブランチとリモートの違いを解決するマージ コミットです。
をgit pull --rebase
実行すると、ログは 2 番目の人のコミットの後に自分のコミットが続く 1 行になります。
なぜ私が混乱していたのか、今わかりました。私は、Git が SVN のように単一のコミット スレッドを維持していると想定していました。代わりに、分岐したクローン ブランチを追跡します。