次のケースを考えてみましょう:
私はトピックブランチでいくつかの作業をしており、マスターにマージする準備ができています:
* eb3b733 3 [master] [origin/master]
| * b62cae6 2 [topic]
|/
* 38abeae 1
マスターからマージを実行し、競合を解決すると、次のようになります。
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | eb3b733 3 [origin/master]
|/
* 38abeae 1
マージには少し時間がかかったので、別のフェッチを実行すると、リモートマスターブランチに新しい変更が加えられています。
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
| | * e7affba 4 [origin/master]
| |/
|/|
* | eb3b733 3
|/
* 38abeae 1
マスターから「git rebase origin / master」を実行しようとすると、すべての競合を再度解決する必要があり、マージコミットも失われます。
* d4de423 2 [master]
* e7affba 4 [origin/master]
* eb3b733 3
| * b62cae6 2 [topic]
|/
* 38abeae 1
マージコミットをリベースするためのクリーンな方法はありますか?そのため、以下に示すような履歴になってしまいますか?
* 51984c7 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | e7affba 4 [origin/master]
* | eb3b733 3
|/
* 38abeae 1
git config --global pull.rebase preserve
常にリベース中にマージコミットを維持するために
git --rebase-merges
最終的には古いに置き換わりgit --preserve-merges
ます。Gitの「rebase --preserve-merges
」が正確に何をしているのか(そしてその理由は何か)を
--preserve-merges
廃止予定です。使用git rebase --rebase-merges origin/master
git rebase --preserve-merges origin/master