Git commit без сообщения о фиксации


108

Как я могу зафиксировать изменения без указания сообщения фиксации? Почему он нужен по умолчанию?


6
Наконец, git commit -a --allow-empty-message -m ''даже редактор больше не открывается. Смотрите мой ответ ниже
VonC

2
В Windows эта команда git commit -a --allow-empty-message -m ''марки коммит сообщение фиксации « ''», так что лучше использовать эту команду вместо: git commit -a --allow-empty-message -m "".
tav

Ответы:


138

Для git обычно требуется непустое сообщение, потому что предоставление значимого сообщения о фиксации является частью хорошей практики разработки и хорошего управления репозиторием. Первая строка сообщения о фиксации используется повсюду в git; для получения дополнительной информации прочтите «Замечание о сообщениях коммитов Git» .

Если вы откроете Terminal.app cdв каталог своего проекта и git commit -am '', вы увидите, что он не работает, потому что пустое сообщение фиксации недопустимо. Более новые версии git имеют
--allow-empty-messageаргумент командной строки, включая версию git, включенную в последнюю версию Xcode. Это позволит вам использовать эту команду для фиксации с пустым сообщением:

git commit -a --allow-empty-message -m ''

До --allow-empty-messageфлага нужно было использовать команду commit-treeсантехники. Вы можете увидеть пример использования этой команды в главе «Raw Гита» из книги Гита .


1
В более новых версиях gitесть --allow-empty-messageаргумент командной строки. См. Документацию здесь . В нем упоминается, что вы могли делать то же самое с помощью команды сантехники git-commit-tree.
Джереми В. Шерман

18
Я думаю, что предложение «предоставление значимого сообщения о фиксации является частью хорошей практики разработки» просто неверно - можно сказать, что предоставление значимого сообщения о фиксации считается частью хорошей практики разработки, поскольку это утверждение в любом случае вызывает разногласия - я, например считают, что меньшее количество информации иногда приводит к меньшей путанице, особенно потому, что git, очевидно, хранит фактические изменения в репозитории, и a git diffпокажет заинтересованной стороне, что именно содержит фиксация, не полагаясь на письменные описания, написанные людьми. Машины должны избавлять нас от труда там, где это возможно.
amn

2
@amn, я также просто начал интересоваться всеми теми десятками тысяч хорошо написанных мною сообщений о коммитах, которые никогда не будут прочитаны никем. Для меня сейчас ценность этой привычки в том, что она заставляет меня просматривать изменения в попытке описать их, и это иногда заставляет меня замечать ошибки. Но ты прав. Я рассмотрю возможность уделить больше внимания коду и меньше - сообщению о фиксации.
osa

7
Git больше не используется только для разработки кода. Когда я обновляю вики-страницу GitHub или документ Overleaf LaTeX, мне обычно нечего сказать, потому что я обновляю документацию. Все семантически значимое в изменении содержится в файле diff. На самом деле я обнаружил, что использую текст изменения как само сообщение фиксации: полностью избыточно!
Джим Пиварски,

1
@amn, иногда вывод git diffне требует пояснений, даже если коммиттер считает, что это так.
cowlinator

26

А если добавить псевдоним, то даже лучше, правда?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Теперь вы просто выполняете nccommit, nc из-за отсутствия комментариев, и все должно быть зафиксировано.


19

При работе над важным обновлением кода, если вам действительно нужна промежуточная точка безопасности, вы можете просто сделать:

git commit -am'.'

или короче:

git commit -am.

И что это значит?
fishinear

Добавляет фиксацию с сообщением '.'
небрежный

Я использую этот метод, когда буквально не помню, что я вложил в коммит, и мне diffвсе это лень .
TheTechRobo36414519

16

Примечание: начиная с git1.8.3.2 (июль 2013), следующая команда ( уже упоминалось выше по Джереми W Sherman ) не будет открывать редактор больше:

git commit --allow-empty-message -m ''

См. Commit 25206778aac776fc6cc4887653fdae476c7a9b5a :

Если с параметром -mgit commit указано пустое сообщение, запускается редактор.
Это неожиданно и ненужно.
Вместо того, чтобы использовать длину строки сообщения для проверки, указал ли ее пользователь, запомните, -mбыла ли задана эта опция .


git 2.9 (июнь 2016 г.) улучшает поведение пустого сообщения:

См. Commit 178e814 (06 апреля 2016 г.) Адам Динвуди ( me-and) .
См. Commit 27014cb (7 апреля 2016 г.) Джеффа Кинга ( peff) .
(Объединено Junio ​​C Hamano - gitster- в коммите 0709261 , 22 апреля 2016 г.)

commit: не игнорировать пустое сообщение, данное -m ''

  • " git commit --amend -m '' --allow-empty-message", хотя это выглядит странно, является допустимым запросом на изменение фиксации, чтобы вообще не было сообщения.
    Из-за неправильного определения присутствия -mв командной строке мы закончили тем, что сохранили сообщения журнала из исходной фиксации.
  • " git commit -m "$msg" -F file" должно быть отклонено независимо $msgот того, пустая строка или нет, но из-за той же ошибки не было отклонено, когда $msgона пуста.
  • " git -c template=file -m "$msg"" должен игнорировать шаблон, даже если $msgон пуст, но он этого не сделал и вместо этого использовал содержимое из файла шаблона.

3

Для этого вам не нужен git. Творческое использование функции bash отлично подойдет. Если вас не интересуют сообщения, просто установите значение по умолчанию и забудьте о нем.

function gitcom() {
  git commit -m "my default commit message"
}

Если вы действительно любите приключения, вы можете добавить, зафиксировать и продвинуть с помощью одной команды

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Что вы затем запустите как

gitzap origin master

Вы даже можете углубиться и использовать parse_git_branch, чтобы сэкономить там несколько нажатий клавиш, или установить общее значение по умолчанию «origin» и «master».


1
Не могли бы вы подробнее рассказать о том, как настроить эту функцию bash?
adaam

1
Предполагая, что вы используете OSX или Linux, вы можете скопировать эти функции и поместить их в свой .profile (он должен быть в вашей домашней папке, если нет, то создайте его). Откройте новое окно консоли, и эти команды станут вам доступны. Любые изменения, внесенные в эти файлы, потребуют от вас обновления сеанса bash, чтобы вы могли ускорить процесс, добавив в этот файл следующие псевдонимы: alias ea = "subl ~ / .profile" # subl - мой текстовый редактор, замените его собственным alias er = "source ~ / .profile" # это будет сброшено. Теперь, когда вы хотите добавить ярлыки, вы просто набираете "ea" (редактировать псевдонимы) И чтобы обновить er
Стивен Гарсия

2
Если вы назвали сценарии git-comи git-zap(без расширения) и помещают их где - то мерзавец может их (то есть где - то в вашем PATH) найти, Git рассматривает их как обычные команды Git , и вы можете вызывать их так: git com,git zap origin master
Manuzor

1
в Баш это либо function gitcom {или gitcom() {ТМК, исправить?

2

Git требует, чтобы у коммита был комментарий, иначе он не примет коммит.

Вы можете настроить шаблон по умолчанию с помощью git в качестве сообщения фиксации по умолчанию или посмотреть флаг --allow-empty-message в git. Я думаю (не уверен на 100%), что вы можете перенастроить git, чтобы он принимал пустые сообщения от коммитов (что не очень хорошая идея). Обычно каждый коммит требует небольшой работы, описанной в вашем сообщении.


1
Не уверен, почему этот ответ был отклонен. Я согласен с тем, что заставлять Git принимать пустые сообщения фиксации или использовать сообщение типа «сохранить» - плохая идея. Прекратите бороться с этим и просто изучите этот проклятый инструмент.
Джезен Томас

2

В моем частном проекте есть следующая конфигурация:

git config alias.auto 'commit -a -m "changes made from [device name]"'

Таким образом, когда я тороплюсь, я делаю

git auto
git push

И, по крайней мере, я знаю, с какого устройства был сделан коммит.


1

Я нашел самое простое решение:

git commit -am'save'

Вот и все, вы будете работать с сообщениями git commit.

вы даже можете сохранить эту рекомендацию в bash или другом материале, чтобы упростить задачу.

Члены нашей команды всегда пишут эти сообщения, но почти никто не увидит их снова.

Сообщение о фиксации убивает время, по крайней мере, в нашей команде, поэтому мы игнорируем его.


-5

Сообщение о фиксации - это лучшая практика, которой следует всегда следовать. Если только вы не единственный разработчик, и это не изменится в ближайшее время.

git commit -a -m 'asdfasdfadsfsdf'

это своего рода шутка. Но для небольших коммитов вам НЕОБХОДИМО внести изменения в heroku (например), это нормально в единственном экземпляре разработчика.
coloradoblue
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.