2016-03-08 192 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