2009-11-12 144 views
85

我有一對提交應該只是一個。如果我使用git,我會使用:我可以壓縮提交Mercurial嗎?

git rebase -i <some-commit-before> 

然後擠壓它們。

我可以在mercurial中做到嗎?如果是這樣,怎麼樣?

+0

@ Ry4an:謝謝,沒有注意到(不同的選擇)。 – 2009-11-12 21:50:55

+0

是的,我花了一段時間才找到那個,因爲你的問題更清楚。 – 2009-11-12 21:52:22

回答

80

是的,你可以使用mercurial來做到這一點,沒有任何擴展Concatenating Changesets

或者,如果你想使用一個擴展,你可以使用:

+0

是的,我在我對一般性問題的評論中發現了我喜歡的那些問題的答案。我認爲這是你的答案。 – 2009-11-12 21:53:10

+0

Collapse擴展易於安裝,非常易於使用,正是我所期待的! – MattGWagner 2010-12-30 03:02:40

+3

有一點值得注意:Histedit擴展名是隨Mercurial 2.3及更高版本發佈的。你只需要啓用它。 – Paidhi 2015-04-16 14:00:40

35

我最喜歡的是hg strip --keep命令。然後我在一次提交中提交所有更改。

這對我來說是最快和最舒適的方式,因爲我喜歡我的日常工作中做很多小的提交;)


注1:strip需要一個內置的擴展mq啓用。
注2:我最喜歡的Git/Mercurial客戶端(SmartGit/Hg)默認在strip期間追加--keep參數。而更加方便的是:它提供了選項join commits:]

+4

hg strip的完整命令是: 'hg strip --keep --rev [rev]' Where 'rev'是第一次提交的版本號,你想和最後一個進行壓縮 – 2014-07-24 15:50:46

+3

@NicolasForney不完全是,'--rev'是可選的,完整的命令是'hg strip --keep [rev]' – 2014-07-25 06:13:00

+0

在3.3.3中給我:'hg help strip'給出' hg strip [-k] [-f] [-n] [-B書籤] [-r] REV ...',並省略修訂給我'中止:空版本集'。 – 2015-06-14 18:51:02

21

Rebase extension就像一個魅力。壓縮2次提交:

$ hg rebase --dest .~2 --base . --collapse 

點是當前修訂的快捷方式。

,當你有一個分支幾個提交,並希望他們都摺疊成一個那就更簡單了:

$ hg rebase --dest {destination branch (e.g. master)} --base . --collapse 

如何工作的:

enter image description here

(從http://mercurial-scm.org/wiki/RebaseExtension#Collapsing

+0

這是完美的! – phouse512 2015-11-18 17:27:38

+0

你從哪裏找到兩次提交的「〜2」? – 2016-08-16 19:14:35

+0

它在revsets主題中進行了介紹,請參閱hg help revsets。 – markand 2016-09-12 07:40:37

5

如果你正在閱讀這個答案,你可以忘記其他所有選擇在本答覆中提到的 ,並使用evolve extension中的fold命令。

evolve是mercurial的延伸,它可以幫助我們獲得安全的可變歷史記錄,但它仍然是實驗性的。你可以使用它從它的repo中克隆它並像這樣將它添加到你的.hgrc中。

[extensions] 
evolve = ~/evolve/hgext/evolve.py 

假設您在主目錄中克隆了進化回購。現在你很好走。您還可以通過hg help fold尋找幫助。

Fold Command

你告訴fold到壁球/摺疊提交這是不破的線性鏈。什麼是摺疊,它會創建一個新的變更集,其中包含所有變更集的變更,並將所有這些提交內容標記爲過時。您可以在docs有更深入的瞭解。

現在假設您有以下歷史記錄。

a -> b -> c -> d -> e -> f -> g 

你想壁球efg。你可以做

hg up g 
hg fold -r e 

其結果將是

a -> b -> c -> d -> h 

其中h是包含來自所有三個提交efg變化的變更。

您也可以從歷史中間摺疊變更集,即不一定必須選擇包含提示的鏈。假設您想摺疊b,cd。你可以做

hg up d 
hg fold -r b 
hg evolve --all 

這將導致

a -> i -> j 

其中ibcdj摺疊變更相同變更爲hEvolve user guide是必讀。

+0

看起來像rebase涵蓋了該擴展的大部分(也許是所有?)用例,當然也包括這個問題。該擴展的殺手功能是隱藏(而不是刪除)你替換的版本,但是rebase的'--keep'選項覆蓋了這個(隨後將修改標記爲祕密,或者在你檢查完成後使用strip結果)。即使在其他修訂版本之間移動修訂版,也可以使用兩個rebase命令序列。 – 2017-07-17 10:03:14

+0

......再加上,如果你正在做一些非常複雜的事情,你總是可以首先克隆本地回購站作爲備份。考慮到這是多麼罕見(希望!),它比學習如何使用全新的擴展更省力。 – 2017-07-17 10:03:48

相關問題