Mecurial patch queue 亂糟糟怎麼辦

最近實習用到的 vcs 是 Mecurial,個人算是有些微程度的瞭解,也知道 mecurial patch queue (mq) 怎麼操作。但是,習慣在 Git 的工作流程,再回到 mq 的結果就是 patch 一團亂。

我先承認, Mecurial 我真的還理解地不夠透徹,才會導致這一連串狀況。

情境

過去使用 Git 時相當習慣有 cache 這件事,所以即使不小心寫了些偏離該次 commit 的內容也可以輕鬆使用 git add -p cache 我想要 commit 的部分,確保主題明確。然而,今天以前的我都還不知道 hg record 這東西,所以我瘋狂地 hg qref hg qnew 了近兩個星期,結果就一堆目的/主題分散的 patch 存在 patch queue 裏面。

問題這就來了,我現在要抽出裏面部分的修改,而這些修改散佈在各個 patch 當中,何如?

解決方案

我想了一些方案,不過最直覺快速的方法還是暴力法。

  • hg qpush -a 套用所有 (需要的) patch
  • hg diff -r qparent > /path/to/patch 直接導出所有 patch 的修改
  • hg qpop -a && hg qq NEW_PATCH_Q pop 掉所有套用的 patch 並且造個新 queue 並啓用它
  • hq qimport /path/to/patch 套用剛剛生出來的 diff file,並以此產生一個 patch
  • 開始修改成需要的樣子

等修改好後,hg qrecord 就可以產生漂亮完美的 patch 了!

實際的方案

最正確的做法應該是儘可能使用 hg qrecord 來產生 patch,確保 commit 內容後其實就不容易發生這一連串的狀況。

參考

Mecurial record
Crecord - curses interface for hg record

Comments

comments powered by Disqus