手动合并到Git中的不同提交

时间:2011-09-12 12:29:04

标签: git

我在本地仓库中有一个提交层次结构,我想回滚到旧提交并应用HEAD提交中的一些(而不是全部)更改。我该怎么做?

请考虑以下情形。我的回购中有以下提交:

  

承诺6(HEAD)
  承诺5
  承诺4
  承诺3
  承诺2
  提交1

我重置为提交2,如下所示

git reset --hard commit2

现在,我希望合并所有应用的所有更改,直到提交6,但没有提交3中的那些,以及其中一些在提交5中。

如果我这样做:

git merge commit6

我最终会在HEAD中拥有所有内容而没有我追求的选择性。

我如何实现目标?

干杯 AF

3 个答案:

答案 0 :(得分:3)

您可以cherrypick提交您想要的内容。

如果您想要修改历史记录,请使用交互式rebase(如果您已经对更改进行了上架,则不应该这样做):

git rebase -i HEAD~6
# in editor that popped up remove line that corresponds to Commit3, save and quit

答案 1 :(得分:2)

在这种情况下,您可以使用变基

您无需重置为提交2

在你的HEAD中,输入

git rebase -i HEAD~6

将提示交互式编辑器。

您可以操纵您的提交的样子 例如删除第3行提交

保存

然后您的目标结果就是您要找的

答案 2 :(得分:1)

您可以仅使用选定的提交创建新分支。

git checkout branch
git checkout -b new_branch

# remove unwanted commits
git rebase -i HEAD~6

# continue with merge

或者你总是可以选择提交。