如果在hg mq补丁队列中的单个补丁中进行了太多更改,该怎么办?

时间:2011-03-24 13:32:02

标签: mercurial diff patch mercurial-queue

hg mq插件的目的是能够对您的存储库进行完美的提交,而不会混淆您通过代码在心不在焉的ADHD引起的漫游中所做的更改;

例如......

我正在研究bug x,当我发现bug y并开始研究它时。此时,您应该在修补程序队列中创建一个新的修补程序,以便在将hg qfinish提交到您的存储库时不要混淆这些更改。

现在假设您忘记制作新补丁并在此过程中hg qrefresh。然后意识到你的错误,你希望将那个补丁的变化分成两个补丁。

我意识到它与编辑队列中的补丁文件(和新补丁文件)有关,可以将更改分成单独的补丁和以后的提交。但是,我还不熟练编辑diff补丁文件。

我在哪里可以了解这一点?怎么会这样呢?

4 个答案:

答案 0 :(得分:3)

另一个选项(假设它在您的平台上运行)是TortoiseHG的2.0版本。 “不恰当”命名的Shelve实用程序允许在补丁之间移动块和文件,或者移动到工作目录中。它适用于Windows,Linux和OSX。

http://tortoisehg.bitbucket.io/

答案 1 :(得分:2)

如本related SO question所述,请查看MQ教程的“Split a patch into multiple patches”部分。

答案 2 :(得分:2)

您可以激活record extension,将.hgrc添加到以下行:

[extensions]
hgext.record =

您可以使用

清除当前的补丁
hg qrefresh nothing

(请注意,“nothing”只是一个随机字符串:qrefresh的参数是必须包含在当前补丁中的文件列表,所以任何不是名称的修改后的文件会做 - 我通常使用“0”)

现在使用hg qrecord <patchName>,您可以交互式选择新修补程序中必须包含哪些更改。然后,可以将其余更改添加到使用qnew或其他qrecord的其他修补程序中。您最终可以使用qpopqfold或编辑.hg/patches/series来合并和重新排序修补程序。

答案 3 :(得分:0)

我有一个shell别名viq="vim $(hg root)/.hg/patches/",我只是用于这些情况!

我只需运行viq来提取补丁,然后手动编辑差异并根据需要将帅哥移动到其他补丁中。

我比交互式方法(例如git add -i)更喜欢这个,因为我从交互式提示中感觉不安全,就像我在编辑器中工作一样(我知道我的编辑器进行备份,具有琐碎的撤销功能)等等......)。