首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改git提交消息而不更改提交哈希

如何更改git提交消息而不更改提交哈希
EN

Stack Overflow用户
提问于 2011-03-06 19:53:33
回答 3查看 17.1K关注 0票数 21

标题不准确,但我不能用一句话表达得更好。

  • 实际上,我知道如何更改git提交消息,比如这里
  • 但我知道它总是改变SHA-1,这是我想要避免的。

我只想在git-log中看到不同的消息。我原以为可以用git-notes来实现,但我还没有做到。

解释:

我需要它来修复提交消息中的错误。我总是在那里写下包含我与客户通信的文档的名称(它看起来就像T1234 Replace foo by bar)。通信时间往往很长,所以在我发现在提交消息中被错误的文档名称误导之前,我可以释放大量的时间。

git-notes的使用

看起来,git-notes的工作方式实际上与声明的这里一样。但是我总是用

代码语言:javascript
复制
git log --oneline

所以我从来没见过。关于向用户撒谎的评论: IMHO,这是可以接受的,只有在使用像--replace-messages-by-notes这样的特殊开关时才能接受,不是吗?因为我总是使用别名而不是直接使用git log,所以我可以在不经常输入的情况下得到我想要的东西。

您认为这是一个合理的功能要求,还是您会推荐另一个工作流给我?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-07 06:10:18

正如许多人所指出的(例如,在冯克的答案非常有用中),git notes确实是您要寻找的机制。对您来说,将您的别名更改为以下内容还不够吗?

代码语言:javascript
复制
git log --oneline --show-notes

据推测,只有偶尔,您才需要向commit中添加一个注释,并且在该命令的输出中,这些注释将在视觉上脱颖而出。

如果确实希望替换每个提交的主题(如果存在注释),则始终可以按照以下方式创建脚本:

代码语言:javascript
复制
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

..。但在我看来,这是为了一点点利益而做的更丑陋的事情。

票数 11
EN

Stack Overflow用户

发布于 2011-03-06 20:19:59

git notes是拥有不同的git日志消息(不同于提交消息)而不更改SHA1的唯一方法,正如“自我注释”文章中提到的(来自2010年8月原文)。

不过,我要说几句:

  • 注释是由命名空间组织的,默认的是“提交”。
  • 备注不修改提交消息,它们只添加了(这可能是git notes不适合您的原因)。
  • 默认情况下,注释不会被推送,除非显式地为它们指定refspec (refs/notes/*)。
票数 17
EN

Stack Overflow用户

发布于 2011-03-06 20:09:31

从技术上讲,这似乎是不可能的(至少对我来说,我不是一个专业的吉特人)。

git提交存储一个树哈希(考虑:当时工作目录的状态),并提供附加的提交信息。当您更改提交消息时,树哈希不会更改,但是提交哈希将更改,因为它是从commit对象计算出来的,因此没有办法绕过它。

详情请参见Progit内部

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5212957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档