在没有打开编辑器 window 的情况下修改 Mercurial 提交?
Amend a Mercurial commit without an editor window opening?
当我使用 mercurial 命令 (hg commit --amend
) 时,它总是会打开编辑器 window。在 git 中,我可以通过 git commit -a --amend -CHEAD
来避免这种情况,是否有与 mercurial 等效的东西?
鉴于您已经拥有并且正在使用 hg commit --amend
,最简单的方法是诱使 Mercurial 使用一个什么都不做的编辑器,使消息文件保持不变并因此可用:
$ hg --config ui.editor=true commit --amend
saved backup bundle to [long path redacted]
也就是说,Mercurial did 打开了一个 "editor window"(或编辑器命令,无论如何),只是这个 - /bin/true
- 立即说"everything worked" 无需触摸交互式终端。
注意:如果您在环境中设置了 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
已被弃用。
在 mercurial 4.3.1 中添加了一个名为 'amend' 的实验性扩展。它执行与 commit --amend 相同的操作,除了不打开评论的编辑 window。
hg amend
它被标记为实验性的,但我经常使用它没有任何问题。
还有一个 unamend
命令将 'undo the most recent amend operation on a current changeset'。
尽管 hg amend
仍标记为实验性的,但我从未 运行 使用它遇到过任何问题。但是,值得注意的是,在使用 hg commit
时,总是可以通过指定一条消息来避开编辑器 window。在修改的情况下,保留以前的消息可能是有意义的,这可以通过多种方式完成,但下面说明了两种可靠的方法:
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
当我使用 mercurial 命令 (hg commit --amend
) 时,它总是会打开编辑器 window。在 git 中,我可以通过 git commit -a --amend -CHEAD
来避免这种情况,是否有与 mercurial 等效的东西?
鉴于您已经拥有并且正在使用 hg commit --amend
,最简单的方法是诱使 Mercurial 使用一个什么都不做的编辑器,使消息文件保持不变并因此可用:
$ hg --config ui.editor=true commit --amend
saved backup bundle to [long path redacted]
也就是说,Mercurial did 打开了一个 "editor window"(或编辑器命令,无论如何),只是这个 - /bin/true
- 立即说"everything worked" 无需触摸交互式终端。
注意:如果您在环境中设置了 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
已被弃用。
在 mercurial 4.3.1 中添加了一个名为 'amend' 的实验性扩展。它执行与 commit --amend 相同的操作,除了不打开评论的编辑 window。
hg amend
它被标记为实验性的,但我经常使用它没有任何问题。
还有一个 unamend
命令将 'undo the most recent amend operation on a current changeset'。
尽管 hg amend
仍标记为实验性的,但我从未 运行 使用它遇到过任何问题。但是,值得注意的是,在使用 hg commit
时,总是可以通过指定一条消息来避开编辑器 window。在修改的情况下,保留以前的消息可能是有意义的,这可以通过多种方式完成,但下面说明了两种可靠的方法:
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