Как изменить git сообщение фиксации без изменения хэша commit
Заголовок не является точным, но я не могу выразить его лучше в одной строке.
- Я действительно знаю, как изменить сообщение git commit, например здесь.
- Но я знаю, что он всегда меняет SHA-1, чего я хочу избежать.
Я хочу видеть только другое сообщение в git-log
. Я думал, что это можно сделать как-то с помощью git-notes
, но я не справился с этим.
Объяснение:
Мне нужно это для исправления ошибок в сообщениях фиксации. Я всегда пишу там название документа, содержащего мое сообщение с клиентом (он выглядит так же, как T1234 Replace foo by bar
). Сообщение имеет тенденцию быть довольно длинным, поэтому я могу потерять много времени, пока не узнаю, что меня вводит в заблуждение неправильное имя документа в сообщении о фиксации.
Использование git-notes
Похоже, что git-notes
работает как указано здесь. Однако я всегда использую
git log --oneline
поэтому я никогда этого не вижу. Что касается комментария о создании git для пользователя: IMHO, это было бы приемлемо, если это произошло только при использовании специального переключателя типа --replace-messages-by-notes
, не так ли? Поскольку я всегда использую псевдоним вместо прямого использования git log
, я бы получил то, что я хочу, не печатая много.
Как вы думаете, это разумный запрос функции или вы бы порекомендовали мне другой рабочий процесс?
Ответы
Ответ 1
Как отмечают различные люди (например, в VonC очень полезный ответ), git notes
действительно является механизмом, который вы ищете. Недостаточно ли вам изменить свой псевдоним на следующее?
git log --oneline --show-notes
Предположительно, только изредка вам нужно будет добавить примечание к фиксации, и заметки будут визуально выделяться на выходе этой команды.
Если вы действительно хотите заменить тему каждой фиксации, если существуют примечания, вы всегда можете создать script по строкам:
for c in $(git rev-list HEAD)
do
n=$(git notes show $c 2> /dev/null)
m=$(git show --oneline $c|head -1)
if [ -n "$n" ]
then
m=${m/ */ $n}
fi
echo $m
done
... но, по моему мнению, это намного уродливее, по-моему.
Ответ 2
git notes
- единственный способ иметь другое сообщение журнала git (отличное от сообщения фиксации) без изменения SHA1, как указано в статье "Примечания к себе" .
Несколько замечаний:
- Заметки организованы с помощью namespace, по умолчанию "коммиты".
- Заметки не изменяют сообщение фиксации, они только добавляют к нему (возможно, поэтому
git notes
не работает для вас).
- Заметки не выставляются по умолчанию, если вы явно не указали refspec для них (
refs/notes/*
)
Ответ 3
Технически это кажется невозможным (по крайней мере для меня, я не git pro, хотя).
A git commit хранит хеш дерева (думаю: состояние вашего рабочего каталога в это время) с дополнительной информацией о фиксации. Когда вы изменяете сообщение фиксации, хеш дерева не изменяется, однако хеш фиксации будет меняться, поскольку он вычисляется из объекта фиксации, там нет пути.
Подробнее см. Внутренние службы.