Отмена коммита из-за пустого сообщения коммита
Как начинающий пользователь git, когда я пытаюсь зафиксировать свою работу с
git commit -a -v
и я ввожу сообщение фиксации в моем редакторе, закрываю файл и получаю эту ошибку:
Aborting commit due to empty commit message.
Я прочитал почти все темы, посвященные этой проблеме, изменил редакторов, в основном все перепробовал, но ничего не помогает. Что я должен делать?
Одна вещь, которую я заметил, при попытке всего процесса с Notepad++, файл не может быть сохранен.
Возможный обходной путь заключается в следующем:
git commit -am "SomeComment"
Но, делая это, я чувствую, что сводю на нет цель использования git. Я хочу правильно задокументировать мои изменения.
26 ответов
Когда вы устанавливаете редактор в конфигурации Git, обязательно передайте параметр "-w", чтобы заставить Git ждать вашего сообщения о фиксации, которое вы напечатаете в своем редакторе.
git config --global core.editor "[your editor] -w"
Эта ошибка может произойти, если ваш комментарий фиксации представляет собой одну строку, начинающуюся с #
персонаж. Например, я получил эту ошибку, когда у меня появилось следующее в окне текстового редактора сообщения коммита:
#122143980 - My commit message was here. The number to the left is a Pivotal Tracker story/ticket number that I was attempting to reference in the commit message.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch [MYBRANCH]
# Your branch is up-to-date with 'origin/[MYBRANCH]'.
#
# Changes to be committed:
# modified: [MYFILE1]
# modified: [MYFILE2]
#
Проблема, конечно, заключается в том, что мое сообщение о коммите началось с #
символ, поэтому git видел эту строку как комментарий, и, следовательно, видел сообщение коммита как пустое, так как в нем не было ничего, кроме комментариев!
Исправление состояло в том, чтобы начать мое сообщение о коммите с другим #
,
В моем конкретном случае заключение Pivotal ID в квадратные скобки порадовало и git, и Pivotal:
[#122143980] My commit message here.
Для Visual Studio Code
git config --global core.editor "code -w"
Для атома
git config --global core.editor "atom -w"
Для возвышенного
git config --global core.editor "subl -w"
Я также новичок в Git. Я столкнулся с той же проблемой, что и вы. Я решил это, набрав:
git commit -a -m 'some message'
Причина в том, что git не позволяет коммитить без сообщений. Вы должны связать некоторые сообщения с вашей командой commit.
Сначала удалите старые записи редакторов:
git config --global --unset-all core.editor
git config --unset-all core.editor
Установите свой редактор:
Для Блокнота ++
git config --global core.editor "Notepad++ -w" git config core.editor "Notepad++ -w"
Для возвышенного
git config --global core.editor "Notepad++ -w" git config core.editor "subl -w"
Если вы хотите зафиксировать с надлежащей (длинным, многострочным комментарием) документацией, но не хотите -m
вариант, что вы можете сделать (и что я делаю при подготовке моих коммитов), это:
- запишите свою документацию (пока вы вносите изменения) в отдельный файл 'doc-commit' (или как вы его называете)
- совершить с '
git commit -a -F /path/to/doc-commit
")
Короче говоря, используйте отдельный файл (который может быть по любому пути, который вы хотите) в качестве сообщения о коммите.
У меня была эта проблема. Я только что установил 1.8.0 ранее, и я обнаружил, что мне пришлось немного изменить вышеприведенное. Я очень новичок во всем этом, но, по сути, кажется, что при фиксации он будет использовать content.editor, а не core.editor, по крайней мере, если у вас что-то установлено для content.editor.
Значит это было
git config --global content.editor "pico -w"
что, наконец, позвольте мне совершить! Очевидно, конечно, используйте любой редактор, который вы используете.
Надеюсь, это поможет кому-нибудь когда-нибудь!
Git не позволяет коммитить без указанного сообщения. Вы указали сообщение фиксации в диалоге фиксации?
Обратите внимание, что строки, начинающиеся с #, обрабатываются Git как комментарии и не рассматриваются как комментарии и игнорируются Git.
На Windows-машине для редактора Sublime мы также можем добавить следующую строку в файл .gitconfig в следующую папку [YOUR DRIVE LETTER]:/users/username/
[core]
editor = '[YOUR DRIVE LETTER]:/Program Files/Sublime Text [YOUR VERSION NUMBER]/sublime_text.exe' --wait
Надеюсь, поможет.
Я настроил мой редактор атомов как
git config --global core.editor "atom --wait"
но когда я сделал
git commit
когда атом уже был запущен, он открыл новую вкладку для добавления комментариев, но git не ждал, пока я сохраню файл, и немедленно выдал сообщение "Aborting". Когда я закрыл атом и попытался сделать коммит еще раз, git запустил атом и ждал добавления комментариев.
git config --global core.editor "subl -w" -F
Это помогло мне после множества проб и ошибок, надеюсь, кому-то это пригодится.
У меня уже есть символическая ссылка на Sublime 3 для использования в качестве команды subl.
Я совершенно не понимаю, почему сработал флаг -F за пределами " ".
Ожидается сообщение о фиксации.
Для vim: (Я тоже новичок. Пока работал только с vim)
После вашей команды,
git commit -v
Вы будете перенаправлены к файлу с именем
".git/COMMIT_EDITMSG"
Это открывается в вашем редакторе (в моем случае это vim)
Вы найдете много прокомментированного текста, который выглядит точно так, как вы видели, когда вы это сделали.
git status OR
git diff
Если вы заметили, вы можете увидеть пустую строку вверху - там, где ожидается сообщение о фиксации. Вы можете ввести здесь сообщение о фиксации, сохранить и выйти из редактора. Это сделано!
Для начала убедитесь, что ваш git правильно настроен для открытия какого-либо приглашения редактора (visual studio / sublime / notepad++ / atom и т. Д.), Чтобы продолжить.
- В моем случае я настроил свой git для использования Visual Studio в среде Ubuntu.
- Я попытался зафиксировать изменение, но это не удалось.
- Затем я посмотрел на свой
.gitconfig
файл и обнаружил, что мой редактор отсутствует-w
параметр - Я побежал
git config --global core.editor "code -w"
команду и перепроверил мой.gitconfig
файл, заметил-w
был добавлен туда правильно. - Попытался зафиксировать изменение еще раз, и это сработало для меня.
Надеюсь, это поможет другим новичкам вроде меня.
У меня была такая же проблема с атомом, но я решил ее, используя блокнот, вместо этого изменив основной редактор для git, используя следующую команду
git config --global core.editor "C:\\Windows\\notepad.exe"
Для комментирования Notepad++ (Windows) сделайте это:
1. Создайте командный файл где-нибудь (например, c:\Users\me\scripts\npp.bat)
Запишите это в командный файл (в зависимости от того, где установлен Notepad ++):
"C:\Program Files\Notepad++\notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"
2. Сохраните пакетный файл.
3. Откройте.gitconfig (который обычно находится в папке пользователя Windows) и убедитесь, что
в разделе [core] у вас есть:
editor = '"c:\\Users\\me\\scripts\\npp.bat"'
Или запустите:
git config --global core.editor '"c:\Users\me\scripts\npp.bat"'
4. Теперь выполните коммит, и он откроет Notepad ++, git commit теперь будет ждать, пока окно notepad ++ не закроется.
Убедитесь, что заглавные W.
git config --global core.editor "open -a 'Sublime Text 2' -W"
или используйте следующую команду, чтобы заменить существующую, которая не работает должным образом.
git config --replace-all core.editor "open -a 'Sublime Text 2' -W"
Причина вашей проблемы в том, что ваш редактор был закрыт до того, как вы вошли в коммит. Я столкнулся с той же проблемой. Так что сказать вашему редактору подождать - это ответ на вашу проблему.
Для этого вам нужно изменить глобальную переменную core.editor в GIT.
Перед изменением вы, возможно, захотите увидеть, какой из них уже существует. Затем используйте приведенный ниже код, чтобы увидеть их в виде списка.
мой, до core.editor без ожидания.
core.editor=gedit
Поэтому я изменил эту переменную с помощью двух кодов ниже. Первая строка для сброса переменной и вторая для ее правильного объявления.
git config --global --unset-all core.editor
git config --global core.editor "code -w"
На этом моя проблема была решена, надеюсь и ваша. Если вы проверите глобальные переменные с помощью
git config --global --list
опять же, вы увидите, что ваш core.editor тоже изменился, как показано ниже.
core.editor=gedit -w
Он показывает, что ваша функция "ожидания" работает.
Я только что столкнулся с этой ошибкой и решил ее, поэтому я также хотел бы поделиться своим сценарием и ответить.
Я выполнил команду
git config --global core.editor "\"C:\Program Files (x86)\Notepad++\notepad++.exe\""
а потом когда я это сделаю
git commit
он открывает блокнот ++, но после того, как я передаю свое сообщение о фиксации и сохраняю его, нажав «ctrl + s», он показал мне это сообщение в командной строке -> «Прерывание фиксации из-за пустого сообщения о фиксации». (как показано на изображении ниже)
Я решил это, предоставляя мое сообщение коммита , как показано ниже (мы должны предоставить 2 пустые строки между нашим Commit TITLE и фиксации Описание , как показано ниже)
Примечание . Строки, начинающиеся с "#", автоматически генерируются git.
Я получил эту ошибку, и хотя я использовал
git config --global core.editor "code -w"
, он все равно не будет ждать, пока я закрою файл. Это просто мгновенно прекратится.
Моя проблема заключалась в том, что я запускал эту команду раньше
git config core.editor "code"
.
Кажется, что
core.editor
(который, как я полагаю, является спецификацией локального рабочего каталога), имел приоритет над
--global core.editor
.
Если
git config --global core.editor "code -w"
(или любой другой редактор, который вы пытаетесь использовать) вам не подходит, попробуйте опустить
--global
.
Я исправил проблему, переключившись с моего необычного редактора MacVim, который открывает новое окно, на стандартный vim по умолчанию в /user/bin/vim, который открывается в том же окне, что и оболочка, откуда он вызывается, и кажется, что она исправлена. эта проблема.
Потратив один час на то, чтобы заставить его работать на моем Ubuntu, я решил использовать Sublime Text вместо Atom для написания сообщений о фиксации. Так что вместо:
git config --global core.editor "atom -w"
Я использовал ту же команду для Sublime.
git config --global core.editor "subl -w"
И все работало нормально. Возвышенная пауза в ожидании сообщения о фиксации.
-w
как предлагали другие, не сработало для меня, но
--wait
делал.
Полный ввод
git config --global core.editor 'code --wait'
(это VS Code, заменить на
subl
для Sublime и т. д.)
Поскольку полное имя аргумента делает очевидным, это устанавливает редактор для открытия сообщения фиксации (
code
) и сообщает об этом
wait
пока файл не будет сохранен и закрыт.
Не забудьте сохранить файл перед закрытием.
У меня возникла эта проблема, и я обнаружил, что если я не оставляю комментарий после коммита, это дает мне эту ошибку. Если я сразу перехожу к главному bash, он не фиксируется. Просто чтобы быть более понятным, я использую GIT Bash, а не другой редактор
Когда я использовал полный путь к файлу Atom, он не работал, поэтому вместо использования:
git config --global core.editor "c:/programs/atom/atom.exe -w"
Я использовал:
git config --global core.editor "atom -w"
и это работало просто отлично. Удачи!
ВАЖНО: Сначала убедитесь, что Atom начинает правильно вызывать его (Atom) из командной строки, которую вы используете.
У меня была та же проблема, и ни один из предыдущих ответов здесь не помог. Вот что я в итоге сделал. Это действительно хакерски, но гарантированно работает.
- Напишите bash-скрипт (например,
), который вызывает выбранный вами редактор и передает ему входной аргумент (т. е. файл, который нужно открыть). Прежде чем двигаться дальше, убедитесь, что эта часть работает. - Внутри bash-скрипта после команды, вызывающей редактор, добавьте следующую строку:
read n1
- В
, установите свой bash-скрипт в качестве «редактора».
Теперь произойдет следующее: всякий раз, когда git вызывает ваш редактор, он не возобновляется, пока вы не нажмете . Таким образом, вы можете написать сообщение о коммите в предпочитаемом вами редакторе, сохранить его, возможно, даже закрыть и открыть снова, чтобы внести изменения, потому что вы что-то забыли — другими словами, все, что захотите — и всякий раз, когда вы думаете, что готовы. , вы возвращаетесь в bash и нажимаете
Решение для ошибки фиксации
Как я показал выше, есть поле фиксации, которое вам нужно ввести при фиксации, это в основном для контроля версий и понимания изменений для каждой фиксации.
Если вы не введете это, вы получите сообщение об ошибке: Прерывание фиксации из-за пустого сообщения фиксации.
Примечание: вышеуказанное работает только в Rstudio фиксации и извлечении файлов.