Изменить коммит Mercurial без открытия окна редактора? - PullRequest
0 голосов
/ 16 декабря 2018

Когда я использую команду mercurial (hg commit --amend), она всегда открывает окно редактора.В git я могу избежать этого с помощью git commit -a --amend -CHEAD, есть ли что-то эквивалентное для Mercurial?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Существует экспериментальное расширение, которое было добавлено в Mercurial 4.3.1, под названием «Поправка».Он выполняет то же действие, что и commit --amend, за исключением того, что не открывает окно редактирования комментариев.

hg amend

Он помечен как экспериментальный, но я использую его довольно часто, без каких-либо проблем.

Также есть команда unamend, которая 'отменит самую последнюю операцию изменения текущего набора изменений'.

0 голосов
/ 17 декабря 2018

Хотя 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
0 голосов
/ 16 декабря 2018

Учитывая, что вы используете и используете 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 устарело.

...