2011-09-02 71 views
1

我從SVN移動到HG和有困難時期的一些限制HG是對我施加:HG:匹配遠程回購的變更

我在一個情況下,我有一些錯誤提交,我想要吹走。事實上,如果我能匹配遠程回購的歷史,那將是非常好的。

使用Git,這是易如反掌:

git reset --hard origin/branch_name 

但我怎麼能有水銀做呢?從我聽說的情況來看,如果你不知道自己在做什麼,移動'小費'可能會無意中產生匿名分支,這與git處理相同操作的方式截然不同。

+0

爲什麼切換到第一位? ;) – knittl

+0

這不是我的選擇:( – Ben

回答

2

「等效」 爲你想要的是hg strip從MQ擴展名,您可以用它來「吹走」您的提交。

https://www.mercurial-scm.org/wiki/StripExtension

另一種 「等價物」 是:

hg update --clean 

隨着-C/- 清潔選項,提交變更都丟棄, 工作目錄更新到所請求的變更。

http://www.selenic.com/mercurial/hg.1.html#update

+0

您的鏈接頁面還提到»如果變更集不是工作目錄的父級,更新被中止« – knittl

+0

@knittl - 在設計上,你不會有一個明確的等價物,我還加了'hg strip',這將有助於他的案例 – manojlds

+0

'hg strip' +1 – knittl

1

Mercurial for Git users有一個命令等價表:

的git的復位 - 硬==汞還原-a --no備份

+0

我看到的鏈接,但最好的等效,在我看來,在我的答案。 – manojlds

+0

+1。我看到'hg revert -a'確實是一個很好的等效。儘管我認爲'hg strip'可以幫助他更多的在他的情況下。 – manojlds

+1

據我所知,這隻會摧毀本地,*未提交*的變化。 – Ben

4

一個簡單的解決方案,它常常被忽視的吹走不需要提交是簡單地複製他們去

hg clone origin new_clone 
rm -rf repo_with_unwanted_commits 

現在new_clone將你送回在遠程回購的小費。如果你有你的克隆其他提交您還沒有推開,但仍然有需要,你可以在本地克隆:

hg clone -r tip_you_want repo_with_unwanted_commits new_clone 
rm -rf repo_with_unwanted_commits 

現在new_clone包含了一切你想要的提交,但不包括那些你想要的垃圾。在這種情況下,您只需在new_clone的hgrc中設置[paths]以指向原始的原點回購,然後回到開始的位置。

這很簡單,不需要擴展,但是請注意,manojlds使用hg strip的建議會更快,並且您可以保留任何可能需要的未跟蹤文件。無論在哪種情況下,只有在您尚未推送要刪除的變更集時才能使用。如果你已經推動,你唯一的安全選擇是hg backout

1

與Mercurial 1。8,以後你可以啓用標準帶擴展並做

hg strip "outgoing()" 

這將使用revset選擇修改剝離,即額外的修訂尚未出現在默認的遠程倉庫。

+0

+1,+1000,如果我可以......這應該是標記的答案!其他答案指向擴展名,但不顯示如何很好地選擇未推送的更改集。 – Assimilater