Как изменить 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 хранит хеш дерева (думаю: состояние вашего рабочего каталога в это время) с дополнительной информацией о фиксации. Когда вы изменяете сообщение фиксации, хеш дерева не изменяется, однако хеш фиксации будет меняться, поскольку он вычисляется из объекта фиксации, там нет пути.

Подробнее см. Внутренние службы.