2010-12-14 21 views
13

當我在提交之前檢查我的工作副本(使用hg statushg diff)時,我經常會注意到一些不需要的更改。例如,我可能只是在調試會話期間臨時添加或刪除一些代碼。我可以使用mercurial恢復文件中的一系列行嗎?

我知道我可以使用hg revert刪除不需要的更改,但是這將刪除整個文件中的所有更改。有沒有辦法恢復文件的一部分?

+0

類似:http://stackoverflow.com/questions/876763/mercurial-revert-a -single-hunk – keturn 2011-01-20 19:47:17

回答

5

一種方法是使用像kdiff3這樣的圖形化比較工具。如果你給它的差異,並選擇「合併當前文件」,你可以一行一行地選擇你想要的。

更好的方法是更頻繁地提交。如果您在添加調試代碼之前習慣於提交,那麼在添加「真實」代碼之前提交或恢復您的調試代碼,可以非常容易地刪除調試代碼,因爲它有自己的修訂版本。或者,您可以將您的調試代碼放在一個單獨的分支中。

+0

+1我已經按照[這些說明](http://mercurial.selenic.com/wiki/KDiff3)啓用'hg kdiff3'命令,並且我找到了「Merge - Merge this文件「菜單項。我花了一段時間才發現,你需要右鍵點擊衝突來選擇你想要選擇的兩個版本中的哪一個,但它似乎工作。我會試試這個。 – 2010-12-14 17:12:04

+0

「合併當前文件」是拼圖的缺失部分。萬分感謝。 – 2016-03-20 11:04:22

7

我不知道,如果你能明確地還原個別行,但我在你們這樣的情況做的是提交代碼,然後恢復休息(在代碼)。這個工作流程很容易使用Mercurial的recordcrecord擴展名(我推薦後者)。

+1

我使用:'hg record -m temp; hg revert -a; hg purge; hg strip -k。「來做到這一點,但也可以在消除不需要的更改後將臨時提交的更改返回到工作副本。 – 2014-12-10 20:49:58

3

TortoiseHg GUI的「Commit」窗口有一個「Hunk Selection」選項卡,允許選擇要提交的文件更改的特定部分。

+1

..但它沒有基於Hunk的恢復.. – user2864740 2015-11-27 05:54:46

+0

@ user2864740,恢復文件並提交您想保留的區塊。 – 2015-11-27 14:39:26

1

我已經爲您的問題得到了不同的答案,這是我的問題。這對於mercurial queues是一個很好的使用案例!

當我即將開始增加調試代碼的變化,我認爲是準備好了,我做了以下內容:

hg qnew -m "fix for bug #123" fix.patch # basically a local-only commit 
hg qnew -m "debugging" dbg.patch   # prepare the next changeset at the tip 
[add my debugging] 
hg qrefresh        # update the changeset at the tip 
[...] 
hg qpop         # pop the debugging off the repo history 

這需要一點點的習慣 - 你最終不得不重新排序您的修補程序,然後摺疊您在原始工作修補程序中所做的任何修復。

此外,檢查比爾巴里的閣樓擴展。本頁面討論如何將其用於幾個不同的工作流程,以及與使用mq相比的方式。 https://www.mercurial-scm.org/wiki/AtticExtension

4

假設你已經啓用了recordshelve擴展,你可以做如下:

hg record -m "garbage" # pick out and commit the change you want to revert 
hg shelve --all   # temporarily hide other changes 
hg strip tip    # remove the garbage changeset 
hg unshelve    # restore the changes you want to keep 
1

我已經與交互ncurses的風格UI hg revert -i,讓你走動,並選擇部分這樣做您可以根據自己的喜好摧毀文件,比較塊或逐行文件,具體取決於您展開更改的深度。

我不知道如果這是一個標準的hg功能或沒有,你可以驗證輕鬆不夠的,如果你有它:

> hg revert --help --verbose | grep -- -interactive 
-i --interactive   interactively select the changes (EXPERIMENTAL) 

只要記住,你標記的變化(X)會是怎樣被核爆,而不是你保留的。

0

如果您想要更改的提交是例如ba1c841aaff4, 最簡單的就是使用:

hg meld -r ba1c841aaff4^ <filename> 

現在點擊中間的右箭頭(指向右側),以恢復你的線條,保存文件並關閉MELD。 kdiff3(舊的和不直觀的)可以替代。

邊注:爲了使用融合在一起,你需要配置它在我們的〜/ .hgrc文件:

[extdiff] 
cmd.meld = 

[merge-tools] 
meld.args=$base $local $other 
相關問題