1

2 人のユーザーが同じリモート ブランチを追跡しているブランチで作業していて、1 人が最初にプッシュした場合、2 人目は他の人の変更でブランチを更新するまでプッシュできません。

では、私が 2 人目の場合、プルを行った後、私の履歴はどうなりますか? 私は単一のマージコミットを取得しますか?それともリベースを行い、他の人が行ったことの最後に変更を加えますか?

前者の場合、私のブランチがリモート ブランチを追跡していても、実際には別の履歴があるということではないでしょうか?

4

3 に答える 3

6

変更をどのように取り込むかによって異なります

実行すると、ローカル ブランチとリモート ブランチのマージgit pullコミットが行われます。

実行git pull --rebaseすると、変更がリモートで発生した変更の後に移動されます。

マニュアルごとhttp://git-scm.com/docs/git-pull

pullgit fetchgit mergeコマンドを組み合わせたものです。--rebase2番目のコマンドに変更を追加するgit rebase

どちらの場合も、ローカルにコミット (および場合によってはマージ コミット) があるため、履歴はリモートの履歴とは異なります。これが、「X コミットよりも進んでいる」というステータスが表示される理由です。プッシュするまで、その場合、リモートとローカルの履歴は同じになります...他の誰かがプッシュするまで。

そのgit pull場合、 で履歴を見るとしたらgit log --graph. コミットの前に履歴が分割されていることがわかります (これは、その時点でリモートから行った最後のコミットです)。次に、2 番目の人のコミットを示すブランチと、あなたのコミットを示すブランチがあります。これらのブランチは、「ブランチ マスターをマスターにマージする」などの 3 回目のコミットで参加します。これは、ブランチとリモートの違いを解決するマージ コミットです。

git pull --rebase実行すると、ログは 2 番目の人のコミットの後に自分のコミットが続く 1 行になります。

于 2013-05-24T18:51:55.057 に答える
0

ここに画像の説明を入力

なぜ私が混乱していたのか、今わかりました。私は、Git が SVN のように単一のコミット スレッドを維持していると想定していました。代わりに、分岐したクローン ブランチを追跡します。

于 2013-05-25T14:43:12.827 に答える