3

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

4

3 回答 3

5

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

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

也就是说,Mercurial确实打开了一个“编辑器窗口”(或编辑器命令,无论如何),只是这个——<code>/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推荐使用。

于 2018-12-16T04:31:33.400 回答
3

尽管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
于 2018-12-16T22:06:09.433 回答
2

mercurial 4.3.1 中添加了一个名为“amend”的实验性扩展。它执行与 commit --amend 相同的操作,但不打开评论的编辑窗口。

hg amend

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

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

于 2018-12-16T14:57:54.487 回答