自上次合并操作以来的Git重基 让我们考虑一下我在一个分支上的一个特殊特性: * 456789 bar (origin/master, origin/HEAD, master) | * 3456789 foo (HEAD -> feature) | * 2345678 Merge origin/master in feature | |\ | |/ |/| * | 1234567
不久前,我合并了自上次合并操作以来的Git重基 让我们考虑一下我在一个分支上的一个特殊特性: * 456789 bar (origin/master, origin/HEAD, master) | * 3456789 foo (HEAD -> feature) | * 2345678 Merge origin/master in feature | |\ | |/ |/| * | 1234567,git,merge,rebase,Git,Merge,Rebase,不久前,我合并了master,但从那时起,我在我的功能上做了foo,而有人在master上做了bar 现在,我想在上次合并之前重新设置bar: * 3456789 foo (HEAD -> feature) * 2345678 Merge origin/master in feature |\ | | | | * | 456789 bar (origin/master, origin/HEAD, master) 我尝试了功能中的git rebase master。问题是Git希望在
master
,但从那时起,我在我的功能上做了foo
,而有人在master
上做了bar
现在,我想在上次合并之前重新设置bar
:
* 3456789 foo (HEAD -> feature)
* 2345678 Merge origin/master in feature
|\
| |
| |
* | 456789 bar (origin/master, origin/HEAD, master)
我尝试了功能
中的git rebase master
。问题是Git希望在主控器的顶部重播我的所有更改,这可能需要大量的工作
一种可能的解决办法是:
$ 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
As squash是一种交互式重基,允许您以任何方式修改任何提交。使用edit命令,您可以在历史记录的任何给定点编辑和添加任何提交
要进行git挤压,请执行以下步骤:
// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X
挤压提交后,选择e
进行编辑,并操纵所需的提交
如果您希望保持提交状态,那么应该使用您建议的git cherry pick
我真的不明白
git-rebase-I
在这种情况下对我有什么帮助。在我的例子中,2345678
有两个父母。我希望其第二个父级1234567
变为456789
。在合并之前编辑所需的提交,并设置要包含的新内容,合并有两个父级,您可以签出任何父级。