Как мне остановить коммит Git, когда ВП на экране ожидает сообщения коммита?

203

Я попросил Git выполнить коммит из git bash, он поднял VI, как всегда.

Теперь я хочу отменить коммит, как я могу предотвратить выполнение коммита с этого момента?

Бен Астон
источник
Стоит добавить, что вам нужно нажать Esc перед входом :q!для выхода из vim.
M_Merciless

Ответы:

332

У вас есть два варианта:

  • Предоставьте пустое сообщение о коммите. Если это новый коммит, и вы еще не сохранили сообщение, вы можете просто использовать :q!(выйти без сохранения). Если вы уже сохранили (или вносите изменения в предыдущий коммит), просто удалите все сообщения журнала и сохраните снова. Это можно сделать с помощью ggdG+ :wqв Vim.

  • Пусть редактор выйдет с ненулевым кодом выхода. В Vim вы можете использовать :cq(выйти с кодом ошибки).

Стоит отметить, что вы всегда можете сбросить свою рабочую копию в состояние, в котором она находилась до фиксации с git reset HEAD^.

Евгений Ярмаш
источник
96
: cq это бизнес. По какой-то причине git пашет независимо от того, использую ли я: q!
Sirex
2
git reset HEAD ^
отменяет
2
: д! вероятно, не работает, потому что там уже есть предопределенное сообщение, вы просто редактируете его.
Папипо
Икота: если требуется git reset HEAD^больше, ваша оболочка может интерпретировать ^ как продолжение строки. Попробуйте git reset "HEAD^", git reset HEAD^^или git reset HEAD~1вместо этого, ответьте на этот вопрос: stackoverflow.com/questions/14203952/git-reset-asks-more
Джейк Стивенс-Хаас,
76
  • :q!не работает при внесении изменений в коммит. Он не обновляет сообщение о коммите, но выполняет изменение :-(
  • :cq полностью отменяет поправку.
Даниэль Пиньоль
источник
1
Я хотел бы добавить еще +1. Я был здесь много раз, когда моя поправка обнаружила неправильный коммит.
Wyrmwood
8

Подводить итоги:

  • При создании нового коммита (то есть git commit) прекратите использование :q!.
  • При внесении изменений (т. Е. git commit --amend) Удаляйте сообщение фиксации (только первые несколько строк, не начинающиеся с #), например, удерживая v и используя клавиши со стрелками, чтобы выделить его, а затем нажав Delete. Выйти, :wqчтобы применить изменения ! Если вы используете :q!изменения, они будут потеряны и будет использовано предыдущее сообщение о коммите.

При использовании VIM в обоих случаях можно выйти :cq- VIM завершит работу с кодом ошибки и фиксация будет прервана.

Мацей Пекарский
источник