Git:恢复旧的提交

时间:2016-03-08 22:17:25

标签: github commit head revert

我对我的git repo做了一些更改并做了一些提交。这是我想要做的,说我的git历史看起来像HEAD - > c1 - > c2 - > c3 - > C4。 问题 1)现在,如果我还原c1,它还会还原所有c2,c3,c4吗?我理解它只恢复c1并保留c2,c3,c4。 2)现在我想恢复所有c1,c2,c3和c4并返回HEAD。什么是最好的方法。

2 个答案:

答案 0 :(得分:1)

Revert将创建一个提交,撤消您想要还原的修订版本的更改。

所以,如果你这样做:

git revert c1

你将以:

结束
  

revertC1 - > (之前的HEAD) - > c1 - > c2 - > c3 - > c4 ......

它只会恢复提交更改。

因此,对于您想要删除HEAD的四个提交优先级的场景:

  

HEAD - > c1 - > c2 - > c3 - > C4

与:

相同
  

HEAD - > HEAD~1 - > HEAD~2 - > HEAD~3 - > HEAD〜4

如果要删除当前提交之前的四个提交。你可以做到

git revert HEAD~5..HEAD~1

系统将提示您为每个还原创建提交消息,并可能解决冲突。

如果您尚未推送您的更改,我要做的是保持历史记录日志清洁:

撤消当前提交并保持代码更改

git reset --soft HEAD~1

存储代码更改

git stash

撤消最后四次提交并删除代码更改

git reset --hard HEAD~4

确保删除任何创建的文件和目录

git clean -di

重新应用我想保留的顶级提交中的更改

git stash pop

*修复冲突以防万一 没有冲突时。提交我的更改

git commit -am "My new changes"

如果准备推,请按。

git push

只有在您没有推动更改的情况下才会这样做。

答案 1 :(得分:0)

如果你将c1恢复为c1状态,但它将创建新的提交(c5),其中包含从c4到c1的所有更改。

[HEAD]--> c1 --> c2 --> c3 --> c4 --> c5 (c1 state)
           |__________________________/\
                     revert