如何制作前一个git提交的副本并使其成为头

时间:2016-08-16 04:55:27

标签: git github

我尝试了恢复,但它一直让我烦恼的冲突。

我想要这样的事情:

A-B-C-d-E-F

A-B-C-d-E-F-d'

有一种简单的方法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

据我的帖子和评论所述,您希望恢复FE,但请将其保留为历史记录。你能做的是:

git revert HEAD~n..HEAD

n替换为远离HEAD(您当前的提交)的<{1}} D之后的提交

这将做的是以HEADD之后的提交以相反的顺序恢复每次提交,确保没有冲突。

当在该范围内存在合并提交时,这变得更加复杂。如果有,请执行以下操作:

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,它们就会毫无痕迹地消失。