Как изменить сообщение git commit без изменения хеша коммита - PullRequest
17 голосов
/ 06 марта 2011

Название не точное, но я не могу выразить его лучше в одной строке.

  • Я действительно знаю, как изменить сообщение 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, я бы получал то, что хотел, не набирая много.

Считаете ли вы, что это разумный запрос функции, или вы бы порекомендовали другой рабочиймне

Ответы [ 3 ]

15 голосов
/ 06 марта 2011

git notes - единственный способ получить другое сообщение журнала git (отличное от сообщения фиксации) без изменения SHA1, как упомянуто в статье «Примечания к себе» .

Несколько замечаний:

  • Заметки организованы по пространству имен , по умолчанию используется "commit".
  • Заметки не изменяйте сообщение о коммите, они только добавляют к нему (возможно, именно поэтому git notes не работает для вас).
  • Примечания не отправляются по умолчанию, если только выуказать для них явно refspec (refs/notes/*)
8 голосов
/ 07 марта 2011

Как отмечали разные люди (например, в очень полезный ответ VonC ), git notes действительно тот механизм, который вы ищете. Разве вам недостаточно изменить псевдоним на следующий?

git log --oneline --show-notes

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

Если вы действительно хотите заменить тему каждого коммита, если заметки существуют, вы всегда можете создать скрипт в соответствии с:

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

... но, на мой взгляд, это намного уродливее для небольшой выгоды.

7 голосов
/ 06 марта 2011

Технически это кажется невозможным (по крайней мере для меня, хотя я не профессионал git).

Коммит git сохраняет хэш дерева (подумайте: состояние вашего рабочего каталога на тот момент)дополнительная информация о коммите.Когда вы изменяете сообщение о коммите, хеш дерева не изменится, однако хэш коммита изменится, так как он вычисляется из объекта фиксации, и нет никакого способа его обойти.* для деталей.

...