2014-06-19 20 views
5

我想通過使用'revert'命令在git中恢復到某個'hash'數字。git revert <hash>由於合併而不允許,但沒有-m選項被給出

我使用下面的命令:

git revert c14609d74eec3ccebafc73fa875ec58445471765 

但是,我正在以下返回:

error: Commit c14609d74eec3ccebafc73fa875ec58445471765 is a merge but no -m option was given.
fatal: revert failed

作爲一個新的Git用戶,請你能解釋發生了什麼&我必須要解決這個問題。

我想恢復到我在運行git log時看到的某個提交(c14609d74eec3ccebafc73fa875ec58445471765)。

+0

可能重複[撤消Git合併?](http://stackoverflow.com/questions/2389361/undo-a-git-merge) –

回答

13

您正在嘗試恢復合併提交,並且git不知道要還原到哪個父級。 -m允許我們選擇要選擇的父母。看到合併提交併記下你想要去哪個父母。家長信息可以在git log可以看到,例如:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Merge: dd3a24c 2462a52

並運行:

git revert <hash> -m 1 

其中1表示母公司數1

如果你想恢復到承諾,做:

git reset --hard <hash> 

瞭解文檔中git revertgit reset之間的差異並確定您想要的是哪一個。 git revert是更安全的選擇,但並沒有真正做到你想要的。它只是恢復(一組)提交的更改。 git reset使您可以轉到歷史記錄中的特定提交,並重寫您的歷史記錄。

+1

manojlds,你運行的完整'git log'命令是什麼見父母? –

2

I want to revert back to ...

那麼你不想git revert,至少不是這樣的。 git revert用於恢復在該提交中進行的特定更改。你要找的是恢復或取消提交後所做的所有更改

git reset是在這裏使用的命令。

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765完全重置您的分支,索引和工作樹到該特定的提交。

請注意,通常的預防措施是適用的:如果其他人已經提取稍後的提交,從歷史記錄中刪除它們會使它們變得複雜。如果您不是要創建一個新的承諾,它只是恢復狀態犯下c14609d74eec3ccebafc73fa875ec58445471765的,你可以使用git rmgit checkout

git rm -r . 
git checkout c14609d74eec3ccebafc73fa875ec58445471765 . 

(該rm需要確保新添加的文件也移除。 ) 然後,您可以在本地歷史記錄之上創建一個新的提交,它可以解除自c14609d74eec3ccebafc73fa875ec58445471765以來的所有更改。

相關問題