git rebase upstream/master
とgit pull --rebase upstream master
に違いはありますか?リモートは任意のリモートにすることができ、必ずしもアップストリームではありません。
git pull --rebase
は fetch(git fetch
) を最初に更新し、upstream/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
(B'
)B
は古いOrigin/master
(フェッチが更新する前)master
は、Origin/master
の上で再生するブランチですこれは、git fetch
+ git rebase Origin/master
とは異なり、pull --rebase
コマンドは、どのコミットが本当にローカルコミットであり、以前のアップストリームからのものかを見つけようとしますフェッチ。
これを行うには、リモートトラッキングブランチのreflog(この場合は
Origin/master
)を調べます。このreflogは、Origin
での連続したgit fetch
操作のヒントを「最新の最初」の順序で表します。Reflogエントリごとに(
Origin/master@{1}
、次に...{2}
など)、そのコミットが現在のブランチヘッドmaster
の祖先であるかどうかをチェックします。見つかるとすぐに、それをリベースの開始点として選択します(上記の例ではB
)。