2012-11-20 31 views
18

This answer顯示瞭如何降級提交到補丁,但是如何才能將mq補丁僅轉換爲本地更改?如何僅將Mercurial隊列修補程序轉換爲本地更改?

+0

對不起,但是mq-patch **已經是「僅本地更改」了,AFAIK。你爲什麼要更多東西? –

+4

「本地更改」是Mercurial術語,用於不在更改集中或由Mercurial修補程序跟蹤的更改。可能有幾個原因希望將補丁轉換回本地更改。無論如何,我需要這樣做幾次,並沒有找到堆棧溢出的答案,也沒有通過谷歌搜索(我不得不RTFM),所以當我發現它的情況下分享了答案,以防其他人想要做同樣的事情。 – Lstor

回答

21

簡短的回答

確保將補丁應用,然後:

hg qrefresh nothing 
hg qpop --keep-changes 
hg qdelete "Name of patch" 

龍答案

首先,你需要確保沒有變化由補丁跟蹤。要做到這一點,使用

hg qrefresh nothing 

nothing僅僅是不是在倉庫一個隨機文件名。爲簡潔起見,我通常使用hg qref 0hg qrefresh接受可選的文件模式。如果提供了該補丁,補丁將跟蹤與該模式相匹配的更改 - 僅限於那些補丁。如果沒有與文件模式匹配的內容,修補程序將不跟蹤更改,因此只會進行本地更改。

現在你有一個無用的補丁躺在周圍,你有一些本地的變化。要清理,你可以做

hg qpop --keep-changes 

彈出修補程序,即使存在本地更改。最後,以去除死,空和應用補丁,你可以使用

hg qrm "Name of patch" 

不能刪除應用的補丁,這就是爲什麼你需要的hg qpop --keep-changes一步。

(注:hg qrmhg qremovehg qdelete別名)。

如果使用TortoiseHg

隨着TortoiseHg,出口補丁複製到剪貼板(工作臺>右鍵單擊該補丁>導出>複製修補程序),然後不應用修補程序,最後從目標爲「工作目錄」的剪貼板導入似乎可行。下面是一些屏幕截圖展示了這個過程: enter image description here

+3

'--keep-changes'不再是'hg qpop'的有效選項。根據'hg help qpop',似乎'--force'現在可以實現我們想要的功能: 「-f --force忘記修補文件的所有本地修改」 – sjbx

+0

'hg qrefresh 0' failed with '該系統找不到指定的文件。' 我找到的替代方法(powershell語法):'hg qrefresh --exclude「$(hg root)」'。這告訴MQ排除存儲庫中的所有內容。無論出於何種原因,只是'.'不起作用,我不得不指定完整路徑(因此,'hg root')。 – moswald

+0

@CraftyThumber我仍然看到'--keep-changes',而AFAICT'--force'會失去我們試圖保存的更改。 – moswald

6

的可以說是簡單的選擇:

hg qfinish qtip 
hg strip -k tip 

也就是說,完成補丁,然後刪除生成的承諾,同時保留其更改(-k選項strip) 。

相關問題