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

时间:2018-12-15 22:36:43

标签: git version-control mercurial amend

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

3 个答案:

答案 0 :(得分:5)

鉴于您拥有并正在使用hg commit --amend,最简单的方法是诱使Mercurial使用不执行任何操作的编辑器,从而使消息文件保持不变并因此可用:

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

也就是说,Mercurial did 打开了一个“编辑器窗口”(或编辑器命令,无论如何),只是这个/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已过时。

答案 1 :(得分:3)

尽管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=true hg commit --amend --date now

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

<form>
    OTHER FORM STUFF

    <div novalidate role="form" method="post" id="fake_form_id_0" data-url="YOUR_POST_URL">
        THIS FORM STUFF
    </div>
</form>

答案 2 :(得分:2)

在水银4.3.1中添加了一个实验性扩展,称为“修改”。它执行与commit --amend相同的操作,只是不打开注释的编辑窗口。

hg amend

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

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