57

git rebase upstream/masterとの間に違いはありgit pull --rebase upstream masterますか?もしそうなら、何ですか?リモートは、必ずしもアップストリームである必要はなく、任意のリモートにすることができます。

4

1 に答える 1

62

は最初に( git pull --rebaseフェッチgit fetchupstream/masterし、コミットを更新します。

最初に更新せずにリベースしただけupstream/masterでは、同じ結果は得られません。

私はそれを「masterブランチと' origin/master'が分岐しました、'ブランチを'分割解除する'?」で説明します。


SnakEは、正確にはそうではないコメントで言及しています。「 」はをするのか を参照してくださいgit pull --rebase git fetch && git rebase origin/master
git pull --rebase

(origin/master)
   |
A--B--C (master)
 \ 
  B'--D (actual origin/master after changing B and force pushing)

git pull --rebaseこの場合、何が行われますか。

git fetch origin
git rebase --onto origin/master B master

ここ:

  • origin / masterは新しく更新されたものですorigin/masterB'
  • B古いものですorigin/master(フェッチが更新される前)
  • master上で再生するブランチですorigin/master

git fetchこれは+とは異なりgit rebase origin/master、コマンドは実際にローカルコミットであり、以前のフェッチでアップストリームからpull --rebase送信されたコミットを検出しようとします。

origin/masterこれを行うために、リモートトラッキングブランチ(この場合は)のreflogを調べます。このreflogは、の連続git fetch操作のヒントをorigin「最新の最初の」順序で表しています。

reflogエントリごとに(、、、origin/master@{1}など...{2})、そのコミットが現在のブランチヘッドの祖先であるかどうかを確認しますmaster。1つが見つかるとすぐに、それをリベースの開始点として選択します(B上記の例)。

于 2013-03-24T18:04:15.577 に答える