2012-10-28 71 views
38

這將是對水銀(汞)的git復位當量(--mixed或--soft)

git reset --mixed HEAD^ 

git reset --soft HEAD^ 

即我想要一個等效善變的命令(或工作流程)保持工作樹完好無損,但將存儲庫恢復到最後一次提交之前的狀態。令人驚訝的是,我沒有發現任何有用的stackoverflow或谷歌。

請注意,我不能使用

hg rollback 

,因爲我已經做了一些歷史使用後的最後HistEdit提交重寫。

加入到澄清: 一些基礎重建和歷史編輯我已經結束了一個< --B < --C後。然後,我使用HistEdit將B和C壓在一起,獲得A-<-C'。現在我想分割提交C'(我​​在B中犯了錯誤的文件)。我認爲最簡單的方法是將存儲庫恢復到狀態A(由於之前所有的重新佈局和歷史編輯,在存儲庫中從未存在過),而工作樹狀態爲C',然後執行兩個提交。

回答

55

複製git reset --soft HEAD^(撤消工作副本當前提交,但保持的變化)正確的做法是:

如果承諾要帶的最後提交所輸入
hg strip --keep -r . 

-1只會工作存儲庫。 .指的是當前簽出的提交,它與Git的HEAD等效的Mercurial最接近。

請注意,如果.有後代,那些也將被剝離。如果你想保持提交左右,那麼一旦你提交ID,可以改爲:

hg update .^ 
hg revert --all -r <commit id> 

這將更新到提交的父母,然後用版本在更換工作副本中的文件那個提交。

+0

注意:這需要hg的MQ擴展。 –

+2

Mercurial 2.8及更高版本附帶專用[strip extension](https://www.mercurial-scm.org/wiki/StripExtension)。 – fhd