假设有如下情况:
我在一个专题分支上完成了一些工作,现在准备合并回主分支(master):
* eb3b733 3 [master] [origin/master]
| * b62cae6 2 [topic]
|/
* 38abeae 1
我从主分支合并代码,解决了冲突,现在我的代码库里有:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | eb3b733 3 [origin/master]
|/
* 38abeae 1
现在,由于合并花费了我一些时间,所以我进行了另一个fetch并注意到远程主分支有新的更改:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
| | * e7affba 4 [origin/master]
| |/
|/|
* | eb3b733 3
|/
* 38abeae 1
如果我从主分支(master)尝试运行git rebase origin/master
,那么我将被迫再次解决所有的冲突,并且还会丢失合并提交(merge commit):
* 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 rebase --preserve-merges origin/master
。 - Ilia K.git config --global pull.rebase preserve
用于在 rebase 过程中始终保留合并提交。 - galathgit --rebase-merges
将最终取代旧的git --preserve-merges
。请参见Git的“rebase --preserve-merges
”到底是做什么的(以及为什么)?。 - VonCgit rebase -p origin/master
。 - Felipe Alvarez--preserve-merges
已经被弃用,请使用git rebase --rebase-merges origin/master
。该命令的作用是保留分支合并信息。 - Arjun Sreedharan