2014-02-12 76 views
1

我們需要恢復到之前的提交,但由於自提交後發生的更改已經投入生產,我們無法用git reset銷燬回購歷史記錄。恢復到先前提交的非破壞性

恢復到過去的提交已被解決herehere,但都沒有提供令人滿意的非破壞性解決方案。

我們試着按照@Ben's answer的方法檢查前一個單獨分支的提交,但是當我們試圖將它合併到master時,我們得到一個「已經是最新的」。消息並沒有發生。

$ git checkout 0766c053 -b reverted 
$ git checkout master 
$ git merge reverted 
Already up-to-date. 
+0

'git revert'中的不滿意是什麼?看起來它就是你正在尋找的東西。 – Amadan

+0

@ Amadan-'git revert'只能恢復一個特定的提交,忽略從此之後所做的任何提交。我們需要將*恢復爲以前的提交。 Git沒有'git revert --to'功能。 – Yarin

+1

啊我明白了。在這種情況下,這應該有所幫助:http://stackoverflow.com/a/1470452/240443 – Amadan

回答

4

我得到了它,從@Amadan和@BobSlocum,害羞而神祕的,是誰給了罰款answer,然後刪除了它就走了感謝這個link ...

這裏有所有你需要做的:

git revert --no-commit 0766c053..HEAD 

這將恢復從HEAD返回到提交散列的所有內容。 (--no-commit標誌讓git可以一次恢復所有提交,而不是使用該範圍內的每個提交的消息來亂丟歷史記錄。)

+1

@ Amadan的鏈接在解釋我所說的方面做得更好。不想看起來像我試圖鯊魚他的榮耀:) –

+1

不用擔心。 :) +1,因爲你寫出了正確的答案。另外,值得注意的是一個通用的語法:如果你想從X到Y恢復所有的東西,'X^Y'工作。 ('X..Y'將從* X開始恢復所有*,而不是X本身)。 – Amadan

0

有人可以毫無疑問地煮了git reset序列做到這一點,但這裏的直達航線:

git checkout -B master $(
     git commit-tree -p master -m - 0766c053^{tree} 
) 

git commit --amend它添加提交信息。