Напишите git commit message перед 'git commit' - PullRequest
54 голосов
/ 19 сентября 2010

Я изучаю Git из Perforce.

Насколько я могу сказать, вы должны написать сообщение о коммите на том же шаге, что и при фиксации. Или мне не хватает того, как я мог бы написать сообщение раньше и заставить его зависать до тех пор, пока я не буду готов к фиксации.

Мне очень понравился рабочий процесс в исполнении, где вы можете редактировать описание списка изменений в любое время, а затем регистрироваться, когда будете готовы. Лично мне нравится открывать описание много раз и документировать, когда я кодирую, или когда я думаю о заслуживающих внимания вещах, на которые стоит обратить внимание.

Возможно с Git?

Ответы [ 9 ]

61 голосов
/ 19 сентября 2010

Посмотрите на флаг -t <file> с git commit

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

В качестве альтернативы есть еще один рабочий процесс, который вы можете использовать с git, который может лучше соответствовать вашему способу работы:

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

Как только вы будете готовы зафиксировать сумму вашей работы, вы можете использовать команду rebase и squash эти коммиты вместе. После этого ваш редактор будет вызываться со всеми отдельными сообщениями, которые вы использовали для небольших коммитов, которые затем вы можете редактировать вместе в одном сообщении.

Это намного проще, чем звучит здесь, и, на мой взгляд, это более мерзкий подход.

8 голосов
/ 19 сентября 2010

Пока у вас нет push вашего обязательства перед другими, вы можете сделать git commit --amend. Это позволит вам изменить ваш коммит, а также ваше сообщение о коммите.

Я обнаружил, что это действительно помогает с «коммитом рано и часто», без разбора количества тривиальных коммитов.

6 голосов
/ 30 апреля 2015

Вы можете использовать эти псевдонимы:

git config --global alias.prepare '!${EDITOR:-vi} $(git rev-parse --git-dir)/.template'
git config --global alias.commitp '!git commit -F $(git rev-parse --git-dir)/.template'

Использование:

git prepare
EDITOR=nano git prepare # heeds standard EDITOR variable
git commitp

Это сохраняет ваше сообщение о коммите в .git/.template.

Но вместо этого,на самом деле вы должны просто использовать рабочий процесс, в котором вы часто вносите атомарные и небольшие изменения, и при необходимости использовать ветви функций для группировки этих изменений.Если вы объединитесь с git merge --no-ff $branch, вы можете использовать git log --first-parent позже, чтобы игнорировать ветви.

3 голосов
/ 31 декабря 2016

Я считаю, что мотивация для этого вопроса заключается в том, чтобы иметь возможность написать описание (сообщение о коммите) до написания любого кода (при этом, конечно, возможность изменять его по мере написания кода).(Использовав Perforce и систему, похожую на Perforce, я знаю, что иногда помогает быть в таком настроении, когда вы пишете описание того, что вы собираетесь делать, прежде чем писать код для этого.)

Помимо записи сообщения в файл и использования флагов -t <file> (--template=<file>) или -F <file> (--file=<file>) для git commit, существует другой подход:

  1. Сделать пустой коммит с помощью git commit --allow-empty.Это, как и любой git commit, вызовет редактор, где вы можете написать сообщение.Напишите его и завершите коммит.

  2. Внесите изменения в код.

  3. Добавьте файлы, которые вы хотите добавить, с помощью git add, а затем git commit --amend (или просто git commit -a --amend, если вы не хотите выбирать конкретные файлы с помощью git add).Это сделает прежний непустой коммит теперь уже не пустым, и вы также можете отредактировать сообщение, чтобы оно более точно соответствовало тому, что вы фактически сделали (если хотите).

(Если выкогда вы работаете с другими, не забывайте git push при этом: не исправляйте коммиты, которые вы уже выдвинули!)

Конечно, совет, чтобы ваши коммиты были как можно более мелкими и атомарными, по-прежнему применим., но этот способ позволяет написать сообщение перед написанием кода.(Подход git commit --amend уже был предложен в другом ответе; я только дополнительно указываю, что вы можете пройти весь путь, используя git commit --allow-empty.)

3 голосов
/ 19 сентября 2010

Вы можете использовать git gui и просто оставить его открытым во время работы.Напишите сообщение для коммита для исправления, которое вы собираетесь сделать, затем внесите реальные изменения кода, подготовьте его и зафиксируйте.

2 голосов
/ 19 сентября 2010

Запишите это в файл; держать его в курсе, как вы работаете. Включите окончательную версию при фактическом совершении.

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

Используя git из командной строки, он откроет ваш редактор с временным файлом и вы сможете прочитать в него сообщение (например,: r filename в vim).

Или вы можете использовать оболочку для чтения этого файла в качестве значения параметра -m:

# bash example, may work elsewhere
git commit -m "$(<filename)"
0 голосов
/ 22 апреля 2019

Чтобы добавить к ответу MatrixFrog, графический интерфейс GitKraken (https://support.gitkraken.com/working-with-commits/commits/) предоставляет аналогичную функциональность. Он позволяет составить сообщение о фиксации внутри GUI до / во время реализации реальных изменений.

Кроме того,это позволяет установить шаблон для структурирования тела фиксации, например:


изменения:

foo

-

новые тесты:

бар

0 голосов
/ 14 июля 2017

Используйте аргумент --file <path> для команды commit.

git commit --file <absolute or relative path to file>

И замените <<em> абсолютный или относительный путь к файлу > путем к файлу.

Пример относительного файла в каталоге над каталогом хранилища:

git commit --file ../commit-message.txt

Вы можете работать с сообщением о коммите в любом текстовом редакторе и оставить его открытым. Просто сохраните файл, а затем зафиксируйте с помощью постоянной команды commit. Он принимает сообщение из текстового файла (.txt) без открытия редактора.

0 голосов
/ 19 сентября 2010

Встроенный, не так, как я знаю. Если вы действительно в отчаянии, вы можете написать это в Терминале как COMMIT="Fix for bug #14453", COMMIT="$COMMIT and bug #4329", а затем зафиксировать как git commit -m "$COMMIT".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...