自上次合并操作以来的Git rebase

时间:2016-03-03 16:06:13

标签: git merge rebase

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

* 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

我相信有一种更简单的方法可以做到。

1 个答案:

答案 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

中建议的内容

enter image description here