How to change git commit message without changing commit hash

我的梦境 提交于 2019-11-30 17:17:29
Mark Longair

As various people have pointed out (e.g. in VonC's very useful answer), git notes really is the mechanism you're looking for. Is it not enough for you to change your alias to the following?

git log --oneline --show-notes

Presumably it's only occasionally that you'll have to add a note to a commit, and the notes will visually stand out in the output of that command.

If you really want to replace the subject of each commit if notes exist, you could always create a script along the lines of:

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

... but that's a lot uglier for little gain, in my opinion.

git notes is the only way to have a different git log message (different than the commit message) without changing the SHA1, as mentioned in the "Notes to Self" article.

A few remarks though:

  • Notes are organized by namespace, the default one being "commits".
  • Notes don't modify the commit message, they only add to it (which might be why git notes isn't working for you).
  • Notes aren't pushed by default, unless you specify explicitly the refspec for them (refs/notes/*)

Technically this seems impossible (at least to me, I'm not a git pro though).

A git commit stores a tree hash (think: the state of your working directory at that time) with additional commit information. When you change the commit message, the tree hash won't change, however the commit hash will change since it is computed from the commit object, there's no way around it.

See Progit internals for details.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!