use*_*050 15 git version-control
git pull --rebase删除未压缩的合并提交.有没有办法让它保存起来?
说我的历史看起来像 -
A
| \
B H
| |
C G
| |
D F
| /
E
Run Code Online (Sandbox Code Playgroud)
(A作为合并提交.)
在git pull --rebase它成为 -
H
|
G
|
F
|
X
|
B
|
C
|
D
|
E
Run Code Online (Sandbox Code Playgroud)
(X作为git pull --rebase我的历史中插入的新提交.) - A被删除.
我知道你可以使用它git rebase --preserve-merges来保存它们git rebase,但是我没有看到用它来保存它们的方法git pull --rebase.
Von*_*onC 32
或者(对于即将推出的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
Run Code Online (Sandbox Code Playgroud)
请参阅66713ef3以获取更多信息(感谢Stephen Haberman):
如果用户正在使用master,并且已经在其功能分支中合并,但现在必须"
git pull"因为master移动了,pull.rebase他们的功能分支将被展平为master.这是因为"
git pull"目前不知道rebase的preserve merges标志,这会避免这种行为,因为它只会重放功能分支到新主服务器上的合并提交,而不会重放功能分支中的每个单独提交.添加一个
--rebase=preserve选项,它将传递--preserve-merges给rebase.还要
preserve为pull.rebase配置设置的允许值添加' ' .
Mar*_*o F 17
你可以拆分pulla fetch和arebase
git fetch origin master
git rebase origin master --preserve-merges
Run Code Online (Sandbox Code Playgroud)
只是:
git pull --rebase=preserve
Run Code Online (Sandbox Code Playgroud)
来自文档:
设置为preserve时,使用
--preserve-merges传递的选项进行rebase,git rebase以便本地创建的合并提交不会被展平.