我尝试了恢复,但它一直让我烦恼的冲突。
我想要这样的事情:
A-B-C-d-E-F
A-B-C-d-E-F-d'
有一种简单的方法可以做到这一点。
答案 0 :(得分:2)
据我的帖子和评论所述,您希望恢复F
和E
,但请将其保留为历史记录。你能做的是:
git revert HEAD~n..HEAD
将n
替换为远离HEAD
(您当前的提交)的<{1}} D
之后的提交。
这将做的是以HEAD
和D
之后的提交以相反的顺序恢复每次提交,确保没有冲突。
当在该范围内存在合并提交时,这变得更加复杂。如果有,请执行以下操作:
git revert -m 1 HEAD~n..HEAD
哪个更喜欢合并提交的第一个父分支,并删除在其他分支中合并引入的更改。这样做非常谨慎,因为它可能不会最终做你想要的。
答案 1 :(得分:0)
与接受的答案相反,我建议(假设您正在讨论master
分支,您希望将某些提交设置回来,同时将跳过的分支保留在某处):
git checkout master
git checkout -b old_master
git branch -f master D
git checkout master
这为您提供了一个非常清晰的历史记录,您删除的垃圾仍然存在
master
|
v
A-B-C-D
\
E-F
^
|
old_master
任何进一步的提交都会导致分歧......
master
|
v
A-B-C-D-G-H
\
E-F
^
|
old_master
所以E和F永远不会混淆你的真实&#34;历史,但你总能回到他们身边。如果您决定最终不再需要它们,那么您只需git branch -D old_master
,它们就会毫无痕迹地消失。