新しいコミットを からmasterに取り込みたいのですが、変更が の上に再生されるtopicような方法ではなく、その逆です。からの新しい変更をの上で再生し、その結果を新しいヘッドとしてインストールします。topicmastermastertopictopic
masterにリベースすると、正確に正しいオブジェクトを取得できます。唯一の問題は、オブジェクトがではなくtopicの新しいヘッドとしてインストールされることです。mastertopic
一時的なヘッドポインタを手動でシャッフルせずにこれを行う良い方法はありますか?
編集:
一時的なブランチ ヘッドを使用して実現する方法を次に示しますが、扱いにくいです。
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。