2011-10-26 62 views
2

假設我爲我的項目進行了N次更改並提交了N次。GIT:如何恢復只有一個歷史變化,同時保持其他人原樣?

之後,突然間,我發現,從N改變一個變化使得它有沒有辦法解決的問題。解決這個問題的唯一辦法就是還原特定變回,同時,我需要讓所有的其他變化(這兩個問題的更改之前的變化,這個問題的更改之後),因爲他們現在的樣子。

如何在GIT中解決這個問題?我的意思是如何只恢復一個歷史性的變化之前,它

+0

你剛剛使用git還是你使用git-svn?無論哪種情況,您是否已經推動了這些提交或者它們對您的系統仍然是本地的? – jamessan

+0

我也推了 – Mellon

回答

1

使用git恢復後保持所有其他的變化。這會創建一個新的提交,其中恢復提交的所有更改都會被還原。這保留了歷史。

3

Git社區書對這類事情很有幫助。您的相關部分是here

最安全的選擇是使用

$ git revert <commit-hash> 

,並解決任何衝突。您可以使用git rebase來做到這一點,但它會重寫歷史記錄,並且在已經推送或公開的存儲庫中是非常災難性的。此外,您可能希望保留顯示您已做出更改的歷史記錄,並且必須將其更改回來。從長遠來看,它更具信息性。

3

像其他人所說的,安全的事情是做git revert。這將清楚地表明你正在「恢復」那個特定的變化。它將應用反向修補程序來撤銷作爲參數提供的提交的效果。

其他更致命的方法是使用git rebase -i並丟棄歷史「壞提交」。這將重寫該提交之後的歷史記錄。具體變化的歷史從樹上刪除,但如果你已經推動了其他人,並且其他人已經推出,他們將會看到合併衝突。

0

請注意,如果你有超過一個變化恢復,也能避免編輯器被打開每個提交您回覆到:

git revert man page

--no-edit 

隨着此選項'git revert'將不會啓動提交消息編輯器。

這使得腳本和鏈接多個恢復更容易。

相關問題