Когда я использую команду mercurial (hg commit --amend
), она всегда открывает окно редактора. В 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 сделал открывает «окно редактора» (или команду редактора, во всяком случае), просто этот - /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
устарел.
@peak: Что-то явно преобладает над ui.editor
. Похоже (из источника), что HGEDITOR
имеет приоритет над настройкой ui.config
, несмотря на то, что это задокументировано как устаревшее.
Спасибо за объяснение.
В mercurial 4.3.1 было добавлено экспериментальное расширение под названием «поправка». Он выполняет то же действие, что и commit --amend, за исключением того, что не открывает окно редактирования для комментариев.
hg amend
Он помечен как экспериментальный, но я пользуюсь им довольно часто без каких-либо проблем.
Также существует команда unamend
, которая «отменяет самую последнюю операцию изменения текущего набора изменений».
Про hg amend
не знал, помогло!
Хотя 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
Также стоит отметить: есть расширение под названием «evolve», которое добавляет hg amend
и использует маркеры устаревания функции evolve, чтобы обеспечить безопасный способ редактирования истории. Это хороший набор функций, но он еще не включен ни в один официальный дистрибутив Mercurial.
По причинам, которые я не могу объяснить, это не работает для меня на Mac:
hg --config ui.editor=true commit --amend
создает / bin / sh: aqua: command not found abort: edit failed: aqua exited with status 127 То же самое и с другими вариантами, напримерhg --config ui.editor=/usr/bin/true commit --amend
;HGRCPATH= hg --config ui.editor=/usr/bin/true commit --amend