有沒有辦法在Mercurial中刪除本地提交?



Answers

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

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

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

  1. 修改歷史
  2. 跳閘

像這樣:

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

Question

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

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

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




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

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

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

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




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




我也遇到了這個問題。 我做了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<myname@email.com>
date:        Fri Aug 14 12:22:02 2015 +0800
summary:     get runs from sandbox

changeset:   2498:9e3e1de76127
branch:      component_engine
user:        other_user_name<name@email.com>
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





Links



Tags

mercurial