让我们考虑一下这种情况,即我在单独的分支上处理特定功能:
* 456789 bar (origin/master, origin/HEAD, master)
| * 3456789 foo (HEAD -> feature)
| * 2345678 Merge origin/master in feature
| |\
| |/
|/|
* | 1234567
前段时间我合并了master
,但从那时起,我在foo
的{{1}}上bar
对我的功能进行了master
。
现在,我想在上一次合并之前重新定义bar
:
* 3456789 foo (HEAD -> feature)
* 2345678 Merge origin/master in feature
|\
| |
| |
* | 456789 bar (origin/master, origin/HEAD, master)
我在git rebase master
尝试了feature
。问题是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
我相信有一种更简单的方法可以做到。
答案 0 :(得分:1)
你在问题的最后描述的是一个很好的方法。
在这里,您可以了解并了解正在发生的事情 How to move HEAD back to a previous location? (Detached head)
另一种选择是sqaush
由于壁球是 interactive rebase
,它允许您以任何方式修改您希望的任何提交。使用edit命令,您可以在历史记录的任何给定点编辑和添加任何提交。
为了做一个git squash,请按照以下步骤操作:
// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X
一旦你压缩你的提交 - 选择e
进行编辑并操纵所需的提交。
如果您希望保持提交原样,那么您应该使用git cherry-pick