2016-03-08 245 views
1

我对git repo做了一些更改并做了一些提交。这是我想要做的,说我的git历史记录看起来像HEAD - > c1 - > c2 - > c3 - > c4。 问题 1)现在,如果我还原c1,它是否会还原所有c2,c3,c4?我的理解是只回复c1,并保持c2,c3,c4不变。 2)现在我想恢复所有的c1,c2,c3和c4,并移回到HEAD。做这个的最好方式是什么。Git:恢复旧的提交

回答

1

恢复将创建一个提交,该提交将撤销要恢复的修订的更改。

所以,如果你这样做:

git revert c1 

您将结束:

revertC1 - >(以前HEAD) - > C1 - > C2 - > C3 - > C4 ...

它只会恢复提交更改。

因此,对于您的情况,您要删除四次提交previos到HEAD:

HEAD - > C1 - > C2 - > C3 - > C4

这是相同的为:

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

如果您想在当前的提交之前删除四个提交。你可以做

git revert HEAD~5..HEAD~1 

系统会提示您为每个恢复创建提交消息,也许可以解决冲突。

在你HAVE未按更改,我会做什么,以保持历史日志清洁会区分:

撤消当前提交,并保持代码的修改

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 

只有在您没有压下您的更改时才会这样。

+0

这是非常有帮助的。谢谢一堆。 – Blanc

+0

很高兴我能帮到你。如果这有助于您解决问题,请将其标记为已接受的答案:D – lebobbi

0

如果您将c1恢复为c1状态,但它会创建新的提交(c5),并将所有更改从c4更改为c1。

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