git rebase upstream/masterとの間に違いはありgit pull --rebase upstream masterますか?もしそうなら、何ですか?リモートは、必ずしもアップストリームである必要はなく、任意のリモートにすることができます。
1 に答える
は最初に( )git pull --rebaseをフェッチgit fetchupstream/masterし、コミットを更新します。
最初に更新せずにリベースしただけupstream/masterでは、同じ結果は得られません。
私はそれを「masterブランチと' origin/master'が分岐しました、'ブランチを'分割解除する'?」で説明します。
SnakEは、正確にはそうではないコメントで言及しています。「 」は何をするのか
を参照してください。git pull --rebase git fetch && git rebase origin/mastergit 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/master(B') 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上記の例)。