Git 自上次合并操作后变基

Git rebase since the last merge operation

让我们考虑一下我在单独的分支上处理特定功能的情况:

* 456789 bar (origin/master, origin/HEAD, master)
| * 3456789 foo (HEAD -> feature)
| *   2345678 Merge origin/master in feature
| |\
| |/
|/|
* | 1234567 

前段时间我合并了 master,但从那以后我在我的功能上做了 foo,而有人在 master 上做了 bar

现在,我想在上次合并之前重新设置 bar

* 3456789 foo (HEAD -> feature)
* 2345678 Merge origin/master in feature
|\
| |  
| |
* | 456789 bar (origin/master, origin/HEAD, master) 

我尝试了 feature 中的 git rebase master。问题是 Git 想要在 master 的顶部重播我的所有更改,这可能需要很多工作。

一个可能的解决方案是:

$ git checkout -b temp feature~3
$ git merge master
$ git cherry-pick foo -n2
$ git branch -D feature
$ git branch -m temp feature
$ git checkout feature
$ git branch -D temp

我相信有更简单的方法。

你在问题末尾描述的是一个很好的方法。

在这里你可以弄清楚发生了什么。


另一种选择是 sqaush

因为 squash 是一个 interactive rebase,它允许您以任何方式修改您希望的任何提交。使用编辑命令,您可以在历史记录的任何给定点编辑和添加任何提交。


要进行 git 壁球,请按照以下步骤操作:

// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X

压缩提交后 - 选择 e 进行编辑并操作所需的提交。

如果您希望保持提交不变,那么您应该使用您在 git cherry-pick

中提出的建议