如何在保留提交历史记录的同时还原git repo?

时间:2018-03-10 08:20:25

标签: git

以下是我所拥有的:

dbd7868 (HEAD -> master) commit 3
19ea7e8 commit 2
5b4baae commit 1

我希望所有文件都与commit 2中的文件完全相同。这就是我的尝试:

git checkout 19ea7e8
git commit -m "reverted to commit 2"

但结果就是这样:

HEAD detached at 19ea7e8
nothing to commit, working tree clean

期望的结果:

xxxxxxx (HEAD -> master) reverted to commit 2
dbd7868 commit 3
19ea7e8 commit 2
5b4baae commit 1

我试着环顾四周,但我找到了答案,其中一个命令将commit 3从历史中删除,然后我找到了答案,其中不清楚历史是否被保留。

编辑:在尝试使用其中一个建议的解决方案后,我不得不再次设置测试项目。这就是我现在所拥有的:

9c4180f (HEAD -> master) jkl
38029d0 ghi
830efcd def
ae96f00 abc

这就是我想要的:

xxxxxxx (HEAD -> master) def again
9c4180f jkl
38029d0 ghi
830efcd def
ae96f00 abc

提交def again应与def完全相同。为了澄清,我希望能够进行任何提交。

2 个答案:

答案 0 :(得分:5)

您可以使用命令git revert <hash1> <hash2> ..

尝试以下命令:

git revert dbd7868

它将创建一个新的提交,它将是commit 3的恢复。

如果要还原任何其他提交,只需使用提交哈希运行revert命令。例如:

git revert 5b4baae #to revert commit 1
git revert 19ea7e8 #to revert commit 2

在所有情况下,还原提交都将在提交3之上。

答案 1 :(得分:1)

我找到了解决方案,感谢John Ilacqua。

以下是我输入的确切命令:

git checkout 830efcd .
git commit -am "revert def"

这是输出:

684b0bb (HEAD -> master) revert def
9c4180f jkl
38029d0 ghi
830efcd def
ae96f00 abc