2017-09-24 92 views
1

我有我的回購一些未提交更改C。我想以任何方式記住這些變化,並獲得乾淨的代碼(沒有這些變化),做一些改變並提交。現在,我想恢復我的更改C並繼續處理它。我知道我可以用很多方式處理它,但這種方式令人ir目。如何使用mercurial做到這一點?記住未提交的更改

所以,更精確地說,我需要的東西就像一個堆棧:

  1. 上的代碼工作。請記住堆棧上的更改C
  2. hg update --clean
  3. 進行更改C2。承諾。從堆棧
  4. 彈出一個變更C和工作就可以了。但是,現在repositorium包含COMMITED變化C2和未提交C。這可能是因爲我需要合併,但我期望從存儲的角度看這種合併是不可見的。所以,

回答

1

啓用您的mercurial.ini.hgrc文件中的水銀隊列擴展:可以

[extensions] 
mq = 

然後,

hg qnew save  # save work in progress as a temporary commit 
hg qpop   # remove that commit 

多結交一些變化....

hg ci -m "new changes" 
hg qpush      # push the saved commit back. 
hg qfinish -a    # convert all temp commits to full commits. 

您還可以啓用貨架訊號分配延長錫永:

[extensions] 
shelve = 

然後,您可以:

hg shelve  # "put away" current uncommitted changes. 
*do other work* 
hg unshelve # bring the shelved changes back 

更多信息,請參見hg help mqhg help shelve

+1

我不認爲我們應該鼓勵更多的人學習進化。讓我們將人們指向進化。 Evolve具有較少的概念開銷並且更容易學習。 MQ也被上游的mercurial棄用(不推薦使用,因爲沒有人正在改進它,並且它將來不會獲得任何新功能)。 – ngoldbaum

+0

我已經使用evolve,並喜歡它,但它仍然有它的怪癖。我認爲不建議使用成熟的擴展名是值得的。然而,我認爲你不喜歡你的第一句話:^) –

2

雖然你當然可以用水銀隊列工作,還有恕我直言一種更簡單,更好的方式:改變你的默認階段的祕密,並與正常人一樣的提交者提交工作。階段祕密提交是可變的,不會通過作用於回購的推拉命令暴露。

此過程的優點是無需更改工作流程 - 無論是使用您想要共享的提交(階段草稿還是公開),還是仍然將它們視爲正在工作並將其保留在本地只要。

此外,如果啓用進化擴展,您將獲得以下好處:修改提交併演進(從而重新綁定)所有依賴它的子提交變得更加容易。

使用mercurial隊列的一大優點是,您可以充分利用inbuild合併功能 - 因此,如果底層代碼發生變化,重新設置新的變更集比使用隊列和HM擱置更容易和自然。

查看introductionhg phaseschangeset evolution需要evolve extension

+0

祕密階段不比草稿階段更易變,只有頭部提交可以被修改(通過--amend)。在mq上也是FYI,您可以重新綁定應用的修補程序隊列,它也會使用合併工具。進化仍然列爲實驗,因此也應該考慮。 –

+0

是的,沒有。你錯過的是進化擴展的實際收益:啓用它,你可以修改任何提交 - 並且隨後只需要「改進」現在改變的所有孩子(這是用一個命令完成的)。它具有額外的好處,即不會像mq一樣丟失歷史記錄(只有在爲修補程序隊列引入新回購時,纔會有這種情況) 雖然祕密和草稿都可以更改 - 草稿提交將被共享,然後可能會成爲不變的。因此,對那些你不想分享的人使用階段祕密。 – planetmaker

+0

我知道進化是什麼,喜歡它。我只是說它被認爲是實驗性的。 –

0

我試過貨架,MQ在其他的答案中描述,但說實話,我一般堅持:

hg diff > saved.patch # This assumes you've not aliased diff to a UI!!! 
hg update -C 
.. work 
hg patch -f --no-commit saved.patch # I alias this for less typing 
.. continue 

減記賬參與,它從來不出錯不像貨架,而補丁本身是更容易攜帶。只需使用常識並確保補丁完全適用,或者使用--partial選項並手動完成補丁。