我在本地仓库中有一个提交层次结构,我想回滚到旧提交并应用HEAD提交中的一些(而不是全部)更改。我该怎么做?
请考虑以下情形。我的回购中有以下提交:
承诺6(HEAD)
承诺5
承诺4
承诺3
承诺2
提交1
我重置为提交2,如下所示
git reset --hard commit2
现在,我希望合并所有应用的所有更改,直到提交6,但没有提交3中的那些,以及其中一些在提交5中。
如果我这样做:
git merge commit6
我最终会在HEAD中拥有所有内容而没有我追求的选择性。
我如何实现目标?
干杯 AF
答案 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
或者你总是可以选择提交。