Да. Запишите сообщение фиксации в другой файл ( :w /some/other/path.txt
). Затем выйдите из редактора без сохранения ( :q!
). Если вы ранее сохранили файл по исходному пути, удалите все и сначала запишите пустой файл (пустое сообщение о фиксации прервет фиксацию).
Теперь, когда вы готовы к фиксации «на реальные деньги», используйте файл сообщения, который вы сохранили по альтернативному пути.
Или скопируйте сообщение фиксации в один из буферов vim.
Стоит отметить, что на самом деле вам вообще не нужно этого делать : commit --amend
позволяет изменить фиксацию после того, как она была сделана, поэтому простое решение - создать фиксацию с тем, что у вас есть, а затем исправить ее перед нажатием. Вы даже можете просто завершить фиксацию в ее прерванном состоянии reset HEAD~
(сбрасывает вас в состояние, в котором ваша рабочая копия была до фиксации), исправить свою рабочую копию, а затем commit -a -c HEAD@{1}
использовать старое сообщение фиксации.
write the empty file (an empty commit message will abort the commit)
часть работала как шарм, спасибо!Если ваш редактор может выйти с кодом ошибки - Git прервет фиксацию. При использовании VIM введите
для выхода с ненулевым кодом ошибки и прерывания фиксации.
источник
commit --amend
поскольку в противном случае вам пришлось бы удалить существующее сообщение фиксации и:wq
.git commit --amend
вместоgit rebase --continue
во время перебазирования.Если у вас открыт vim для записи сообщения о фиксации, просто удалите строки, которые не начинаются с символа #, и git прервет вашу фиксацию.
источник
ggdG
будет вырезать все содержимое сообщения, а затем при следующем запускеvim
вы можете толькоP
текст, который вы ранее вырезали.Хотя вы можете прервать фиксацию, другой подход - изменить фиксацию позже. Просто зафиксируйте свою текущую работу, затем внесите любые дополнительные изменения, которые вы хотите,
git add
их, а затем запуститеgit commit --amend
. Вы будете помещены обратно в редактор сообщений фиксации, и при сохранении фиксация будет изменена, чтобы включить дополнительные изменения и ваше новое сообщение фиксации.источник
Да, это возможно. Для фиксации ваш редактор ДОЛЖЕН записать сообщение фиксации в файл
.git/COMMIT_EDITMSG
и выйти с кодом состояния 0.Итак, если вы используете VI / VIM, вы можете сделать следующее ...
:w
(по умолчанию это сохранит текущий контент в.git/COMMIT_EDITMSG
):cq
git commit -eF .git/COMMIT_MESSAGE
Он
-F /path/to/file
заполнит редактор любым заданным содержимым из / path / to / file. Однако по умолчанию это немедленно выполнит фиксацию, если вы не предоставите-e
флаг дополнительно для редактирования .источник
/foo/bar/
каталоге, относительном от корня проекта), напримерgit commit -eF ../../.git/COMMIT_MESSAGE
:w
do:sav committmp
andgit commit -eF committmp
Обычно я делаю коммиты,
IntelliJ
используя предоставленные терминалы. К сожалению, мои коммиты выполняются вручную:git commit -m'my message' // etc
так что единственное, что я считаю безопасным, - это просто закрыть окно терминала! Просто выделите свой текст, если хотите его сохранить, затем скопируйте, а затем закройте окно терминала.
источник
Ответ @bdonlan хорош именно для этого вопроса, но я укажу на ситуацию, когда вам может потребоваться лучшее решение.
Допустим, вы хотите добавить изменения в последнюю фиксацию. Итак, вы делаете, как предложил @bdolan:
Представьте, что во время написания нового сообщения вы сожалеете о добавлении этих файлов в этот коммит. Проблема в том, что вы застряли с уже сохраненным сообщением о фиксации, и выход из редактора (с сохранением или без сохранения) добавит эти изменения в последнюю фиксацию. Чтобы вернуться к точке, в которой вы были до этих действий, вам потребуется разделить последнюю фиксацию - держу пари, вы хотите этого избежать.
Хитрость заключается в том, чтобы сохранить и выйти из редактора, когда в нем есть только строки, начинающиеся с
#
строк, или вообще нет строк. При выходе вы увидите сообщение:И вы вообще не изменили последний коммит.
источник
git commit; vim ....; git commit --amend; git reset HEAD@{1}
. То есть: если я хочу «отменить» поправку, мне не нужно разбивать предыдущую фиксацию. объект фиксации, который был HEAD до изменения, сохраняется какHEAD@{1}
. Кроме того, zetta уже предложила удалить все строки без комментариев.