Я в середине совершения. Я набрал сообщение commit в vim. Теперь я вспомнил, что мне нужно что-то изменить. Я понимаю, что есть другие возможности для выполнения того, что я хочу, но я хочу знать, есть ли способ прервать фиксацию, но все же сохранить сообщение о фиксации, которое я набрал до сих пор.
Git: abort commit в середине ввода сообщения
Ответ 1
Да. Запишите сообщение фиксации в другой файл (:w /some/other/path.txt
). Затем выйдите из редактора без сохранения (:q!
). Если вы ранее сохранили файл до исходного пути, удалите все и сначала напишите пустой файл (сообщение с пустой фиксацией прекратит фиксацию).
Теперь, когда вы готовы совершить "для реалов", используйте файл сообщения, сохраненный на альтернативном пути.
В качестве альтернативы скопируйте сообщение фиксации в один из буферов vim.
Стоит отметить, что вам действительно не нужно это делать вообще: commit --amend
позволяет вам изменить фиксацию после ее создания, поэтому простое решение состоит в том, чтобы произвести фиксацию с тем, что у вас есть, а затем исправить ее перед тем, как нажимать. Вы даже можете закончить фиксацию в разбитом состоянии, reset HEAD~
(сбрасывает вас до состояния, в котором была ваша рабочая копия, до фиксации), исправить вашу рабочую копию, а затем commit -a -c [email protected]{1}
использовать старое сообщение фиксации.
Ответ 2
Если ваш редактор может выйти с кодом ошибки - Git прервет фиксацию. При использовании VIM введите
:cq
чтобы выйти с ненулевым кодом ошибки и прервать фиксацию.
Ответ 3
Если у вас открыт vim для записи сообщения о фиксации, просто удалите строки, которые не начинаются с # и git, прервут вашу фиксацию
Aborting commit due to empty commit message.
Ответ 4
В то время как вы можете прервать фиксацию, другой подход заключается в том, чтобы впоследствии поменять фиксацию. Просто скопируйте свою текущую работу, затем сделайте все необходимые изменения, git add
их, затем запустите git commit --amend
. Вы будете помещены обратно в редактор сообщений фиксации, и при сохранении в коммит будут внесены изменения, чтобы включить дополнительные изменения и новое сообщение о фиксации.
Ответ 5
Да, это возможно. Для фиксации ваш редактор ДОЛЖЕН записать сообщение фиксации в файл .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
для редактирования.
Ответ 6
@bdonlan ответ хорош для этого самого вопроса, но я укажу на ситуацию, когда вам может понадобиться лучшее решение.
Предположим, вы хотите добавить изменения к последнему фиксации. Так вы делаете, как @bdolan предложил:
git add files
git commit --amend
Представьте, что во время написания нового сообщения вы сожалеете о добавлении этих файлов в это сообщение. Проблема заключается в том, что вы застряли в сообщении уже сохраненное, и выход из редактора (с сохранением или без сохранения) добавит эти изменения к последнему фиксации. Возвращаясь к той точке, в которой вы были, до того, как эти действия потребуют от вас разделить последний коммит, я бы сказал, что вы хотите избежать этого.
Трюк заключается в том, чтобы сохранить и выйти из редактора, когда у него есть только строки, начинающиеся с #
, или вообще никаких строк. Когда вы выйдете, вас встретит сообщение:
Aborting commit due to empty commit message.
И вы не изменили последнее коммит вообще.