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使用git rebase --preserve-merges来保存它们,但是我看不到使用git pull --rebase来保存它们的方法。
发布于 2012-08-08 19:48:07
您可以将pull拆分为fetch和rebase
git fetch origin master
git rebase origin master --preserve-merges发布于 2013-09-12 13:35:40
更新:正如我在"What exactly does Git's "rebase --preserve-merges" do (and why?)“中所介绍的,从Git2.18 (Q2 2018)开始,您会更喜欢new option --rebase-merges而不是传统的--preserve-merge
从那时起:
stops advertising it in the "git rebase --help" output.,
--preserve-merge,所以:
git rebase --interactive --rebase-merges origin/master
# or
git config pull.rebase merges
git rebase --interactive origin/master (would use rebase-merges)2013年的原始答案:
或者(对于upcoming git 1.8.5 Q4 2013,现在在git 1.8.5中提供,2013-11-27):
"
git pull --rebase“总是选择执行bog标准的展平重置。
您可以通过将"pull.rebase“配置设置为"preserve”来告诉它运行"rebase --preserve-merges“。
因此,一个简单的配置就足以确保您的pull --rebase确实保留了合并:
git config pull.rebase preserve有关更多信息,请参阅commit 66713ef3 (感谢Stephen Haberman):
pull:允许在重新建立基址时使用pull保留合并
如果用户在
上工作,并且已经合并到他们的feature分支中,但是现在必须"
git pull“,因为master移动了,随着pull.rebase的移动,他们的feature分支将被展平为master。
这是因为"git pull“目前不知道rebase的保留合并标志,这将避免这种行为,因为它只会将功能分支的合并提交重放到新的主节点上,而不会在功能分支中重放每个单独的提交。
添加一个--rebase=preserve选项,它将把--preserve-merges传递给rebase。
还要将'preserve‘添加到pull.rebase配置设置的允许值中。
发布于 2016-07-28 01:10:24
简单地说:
git pull --rebase=preserve来自the docs
当设置为保留时,使用传递给
git rebase的--preserve-merges选项重新基址,这样本地创建的合并提交将不会被展平。
https://stackoverflow.com/questions/11863785
复制相似问题