新しいコミットを からmaster
に取り込みたいのですが、変更が の上に再生されるtopic
ような方法ではなく、その逆です。からの新しい変更をの上で再生し、その結果を新しいヘッドとしてインストールします。topic
master
master
topic
topic
master
にリベースすると、正確に正しいオブジェクトを取得できます。唯一の問題は、オブジェクトがではなくtopic
の新しいヘッドとしてインストールされることです。master
topic
一時的なヘッドポインタを手動でシャッフルせずにこれを行う良い方法はありますか?
編集:
一時的なブランチ ヘッドを使用して実現する方法を次に示しますが、扱いにくいです。
git checkout master
git checkout -b temp # temp points to master
git rebase topic # topic is brought into temp, temp changes played on top
これで目的のオブジェクトが得られ、 によってポイントされtemp
ます。
git checkout topic
git reset --hard temp
今topic
それを持っています。あとは、temp を削除して整理するだけです。
git branch -d temp
もう 1 つの方法は、を廃止しtemp
て単にリベースmaster
し、次に にリセットtopic
することmaster
です。最後にmaster
、reflog またはカット アンド ペースト バッファから古いヘッドを引っ張って元の状態に戻します。これにより、6 つのステップに削減されますが、それでも厄介です。
git checkout master
git rebase topic # solve conflicts, git rebase --continue, if necessary
git checkout topic
git reset --hard master # topic and master same now
git checkout master
git reset --hard HEAD@{13}
reflog を探し回るよりも、最後のステップで保存されたコミット ハッシュに依存する方が適切です。
これが役立つ理由
ブランチに取り組んでいる何人かの人々が、 から分離されmaster
ているが定期的に統合されている開発に協力しているとします。このようにリベースを行うことで、ブランチでの早送り以外の変更 (ブランチ履歴の書き換え) を回避できます。master
ブランチを統合するときにどのように扱われるかは別の話です。ただし、の非早送り操作を回避するシナリオなど、オプションがありますmaster
。