在不打开编辑器窗口的情况下修改Mercurial提交



当我使用mercurial命令(hg commit --amend(时,它总是打开编辑器窗口。在git中,我可以通过git commit -a --amend -CHEAD来避免这种情况,mercurial有等效的东西吗?

在mercurial 4.3.1中添加了一个实验扩展,称为"修正"。它执行与提交相同的操作——修改,只是不打开注释的编辑窗口。

hg amend

它被标记为实验性的,但我经常使用它,没有任何问题。

还有一个unamend命令,它将"撤消对当前变更集的最新修改操作"。

假设您已经并正在使用hg commit --amend,最简单的方法是诱使Mercurial使用一个什么都不做的编辑器,使消息文件保持不变,因此可以使用:

$ hg --config ui.editor=true commit --amend
saved backup bundle to [long path redacted]

也就是说,Mercurial确实打开了一个"编辑器窗口"(或者编辑器命令,无论如何(,只是这个/bin/true在不接触交互式终端的情况下立即表示"一切正常"。


注意:如果您在环境中设置了HGEDITOR,这实际上会覆盖ui.editor:

def geteditor(self):
'''return editor to use'''
if pycompat.sysplatform == 'plan9':
# vi is the MIPS instruction simulator on Plan 9. We
# instead default to E to plumb commit messages to
# avoid confusion.
editor = 'E'
else:
editor = 'vi'
return (encoding.environ.get("HGEDITOR") or
self.config("ui", "editor") or
encoding.environ.get("VISUAL") or
encoding.environ.get("EDITOR", editor))

所以:

HGEDITOR=true hg commit --amend

将更可靠地执行相同的操作(并且键入更少(,但文档中没有这样调用它,只说HGEDITOR是不推荐使用的。

尽管hg amend仍然被标记为实验性的,但我在使用它时从未遇到过任何问题。然而,值得注意的是,在使用hg commit时,可以通过指定消息来避免编辑器窗口。在修改的情况下,保留以前的消息可能是有意义的,这可以通过几种方式来完成,但以下是两种稳健的方法:

hg commit --amend -m "$(hg log -l 1 --template '{desc}')" --date now
hg commit --amend -m "$(cat $(hg root)/.hg/last-message.txt)" --date now

然而,出于实际目的,如果您的平台支持它,使用HGEDITOR会更简单:

HGEDITOR=true hg commit --amend --date now

最新更新