【发布时间】:2013-09-29 11:38:47
【问题描述】:
考虑以下场景:
- 我从 master 签出了一个分支
- 我做了一些提交
- 我合并了更新的 master
- 我做了更多的提交
- 现在我希望从第 4 点重新提交提交,以便第 2 点的提交不受影响。
所以如果我最初有:
(1) (2)
x--x--x--x--x--x--x master
\ \
y--y--Y--y--y dev
(2)(3) (4)
我想得到:
(1) (2)
x--x--x--x--x--x--x master
\ \
y--y--------Y'--y'--y' dev
(2) (5) (5)
如果我只是做git rebase master,它将从 2 和 4 重新提交提交,并从 3 删除合并。这不是我想要的。
还可以选择在从 3 合并提交之前执行 git merge master,然后在合并提交之前执行 git rebase -i -p,并在从 3 合并之后移动最后一个合并,然后将其修复/压缩到从 3 的合并中。更新:它并不那么容易。 Git 拒绝压缩两个合并。这个问题:git rebase interactive: squash merge commits together.
【问题讨论】:
-
我的答案是正确的(除了我错误地将操作称为
merge --onto:它是rebase --onto)。我已经更新了答案以更接近你想要的。 -
你得到什么错误信息?
-
拒绝压缩合并:987ab25995f24554cc7ce1451919327e09c5a18b
-
好的。我想stackoverflow.com/q/1725708/6309 中提到的
reset --soft可以提供帮助。但不确定确切的顺序。
标签: git git-rebase git-pull