git pull --rebase
删除未压缩的合并提交。有没有办法让它保存下来?
说我的历史看起来像 -
A
| \
B H
| |
C G
| |
D F
| /
E
(A
是合并提交。)
在git pull --rebase
成为 -
H
|
G
|
F
|
X
|
B
|
C
|
D
|
E
(X
是我的历史记录中插入的新提交git pull --rebase
。) - A
已删除。
我知道您可以使用git rebase --preserve-merges
使用git rebase
保留它们,但我看不到使用git pull --rebase
保留它们的方法。
答案 0 :(得分:31)
或者(对于upcoming git 1.8.5 Q4 2013,现在以git 1.8.5,2013-11-27发布):
"
git pull --rebase
"总是选择做沼泽标准的扁平变形 您可以告诉它运行"rebase --preserve-merges
"通过设置"pull.rebase
"配置为"preserve
"。
因此,一个简单的配置就足以确保您的pull --rebase
确实保留合并:
git config pull.rebase preserve
有关详情,请参阅commit 66713ef3(感谢Stephen Haberman):
如果用户正在使用master,并已在其功能分支中合并,但现在必须"
git pull
"因为大师移动了,pull.rebase
他们的功能分支将被夷为平地。这是因为"
git pull
"目前还不知道rebase的保留合并标志,这会避免这种行为,因为它只会重放功能分支到新主服务器的合并提交,而不会重放功能分支中的每个单独提交。 / p>添加
--rebase=preserve
选项,该选项会将--preserve-merges
传递给rebase。同时添加'
preserve
'到pull.rebase
配置设置的允许值。
答案 1 :(得分:17)
您可以在pull
和fetch
rebase
git fetch origin master
git rebase origin master --preserve-merges
答案 2 :(得分:8)
简单地:
git pull --rebase=preserve
来自the docs:
设置为preserve时,将
--preserve-merges
选项的rebase传递给git rebase
,以便本地创建的合并提交不会被展平。
答案 3 :(得分:0)
自 git v2.22.0 起,--preserve-merges
选项已被弃用,取而代之的是 --rebase-merges
(与 --interactive
option 结合使用)以在另一个基本提示之上重新应用提交git-rebase
:
git fetch origin master
git rebase --interactive --rebase-merges origin/master