mercurial教學 - 有沒有辦法在Mercurial中刪除本地提交?




git比較 mercurial中文 (8)

您可以使用Rebase擴展更容易地解決這個問題,只需使用hg pull --rebase並且您的提交會自動重新分配給拉取版本,避免分支問題。

所以我一直在Mercurial中犯了一個愚蠢的錯誤。 很多時候,我會開始工作而不進行“hg pull”和“hg update”。 當我嘗試推送更改時,出現錯誤。

有沒有辦法刪除我的本地提交,所以我可以避免創建多個頭,分支等? 我只想刪除我的本地提交,使用提示合併我的更改,然後重新提交。 聽起來很簡單,對吧? 我似乎無法找到任何方法輕鬆刪除本地提交,所以我可以乾淨地合併提示。

再次,我只是試圖刪除用“hg ci”進行的本地提交。 我不想修改文件,還原等。


我也遇到了這個問題。 我做了2次commit並希望回滾並刪除這兩個提交。

$ hg rollback

但是, hg rollback只是hg rollback到最後一次提交,而不是2次提交。 那時我沒有意識到這一點,我改變了代碼。

當我發現hg rollback剛剛回滾一個提交時,我發現我可以使用hg strip #changeset# 。 因此,我使用hg log -l 10來查找最新的10次提交並獲得我想要strip的正確變更集。

$ hg log -l 10
changeset:   2499:81a7a8f7a5cd
branch:      component_engine
tag:         tip
user:        myname<[email protected]>
date:        Fri Aug 14 12:22:02 2015 +0800
summary:     get runs from sandbox

changeset:   2498:9e3e1de76127
branch:      component_engine
user:        other_user_name<[email protected]>
date:        Mon Aug 03 09:50:18 2015 +0800
summary:     Set current destination to a copy incoming exchange

......

$ hg strip 2499
abort: local changes found

什麼是abort: local changes found意味著什麼? 這意味著hg發現了尚未提交的代碼的更改。 所以,要解決這個問題,您應該使用hg diff來保存您已更改的代碼,並且hg reverthg strip #changeset# 。 像這樣:

$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#

完成上述操作後,您可以patch diff文件,並將代碼添加回您的項目。

$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff

如果您正在使用Hg烏龜,只需在以下位置激活擴展名“ mq ”:

  1. 文件/設置/擴展/
  2. 選擇mq

然後從您想要開始分條的地方選擇底部修訂版,方法是right click它並選擇:

  1. 修改歷史
  2. 跳閘

像這樣:

在這個例子中,它將從第19個修訂版刪除到最後一個已提交的(22)。


hg strip是你正在尋找的東西。 如果你熟悉git,它類似於git reset

使用控制台:

  1. 你需要知道修訂號。 hg log -l 10 。 該命令顯示最近10次提交。 找到你正在尋找的提交。 您需要更改集行changeset: 5888:ba6205914681 4位數字changeset: 5888:ba6205914681

  2. 然後hg strip -r 5888 --keep 。 這將刪除提交記錄,但保留所有文件修改,然後您可以重新提交。 (如果你想刪除文件,只需刪除--keep hg strip -r 5888


現代答案(僅適用於Mercurial 2.1之後):

使用Phases並將您不想共享的修訂標記為秘密(私人)。 這種方式,當你推他們不會被發送。

在TortoiseHG中,您可以右鍵單擊提交以更改其階段。

另外:您也可以使用擴展名“rebase”將您的本地提交移動到共享存儲庫的頭部。


啟用“ mq ”擴展名並輸入以下內容:

hg strip #changeset#

其中#changeset#是要刪除的變更集的散列。 這將刪除所述變更集, 包括從其下降的變更集。

有關更多信息,請查看Strip Strip

如果你得到“未知命令”strip,你可能需要啟用它。 為此,請查找.hgrcMercurial.ini文件並將以下內容添加到該文件中:

[extensions]
mq = 

請注意,(正如Juozas在他的評論中提到的)具有多個頭部是Mercurial中的正常工作流程。 你不應該使用strip命令來對付它。 相反,你應該把你的腦袋和腦袋合併,解決任何衝突,測試,然後推。

當您真的想擺脫污染分支的變更集時, strip命令很有用。 事實上,如果你在這個問題的情況下,你想永久徹底刪除所有“草稿”變更集 ,請查看最基本的建議答案 ,即:

hg strip 'roots(outgoing())'

如果你熟悉git,你會很樂意使用像git rebase -i一樣工作的histedit


相當於hg commit --amend GUI hg commit --amend

這也適用於TortoiseHG的GUI(我使用v2.5):

切換到“提交”視圖,或者在工作台視圖中選擇“工作目錄”條目。 'Commit'按鈕有一個名為'Amend current revision'的選項(點擊按鈕的下拉箭頭查找它)。

          ||
          ||
          \/

注意事項

只有當mercurial版本至少為2.2.0,並且如果當前修訂版未公開,這個額外選項才會啟用,不是補丁程序,也沒有子項。 [...]

單擊該按鈕將會調用'commit --amend'來修改修訂版本。

有關THG開發通道的更多信息





mercurial