如何在 git 中编辑任何提交的提交消息? [复制]

Posted

技术标签:

【中文标题】如何在 git 中编辑任何提交的提交消息? [复制]【英文标题】:How do I edit the commit message of any commit in git? [duplicate] 【发布时间】:2011-04-25 19:29:24 【问题描述】:

假设我有 3 个未推送的提交。现在我想更改第一次或第二次提交的提交消息(使用git commit --amend 将它们更改为第三次很简单)。该怎么做?

【问题讨论】:

这个有点像***.com/questions/3926768/…。我尝试(如下)查看如何编写 commit --amend 脚本。让我知道它是否有效。 【参考方案1】:

要在子问题上反弹:是否有 git commit --amend 用于先前的提交(而不仅仅是最后一个),您可以尝试类似(尚未测试,但 Colin O'Dell 在 the comments 中提到为它写了一个脚本colinodell/git-amend-old):

git checkout -b tmp
git reset --hard HEAD~2
git commit -amend 
git rebase --onto tmp HEAD@1 master

那就是:

x---x---x---x---x
                ^
                |
               (master*) (* = current branch)

git checkout -b tmp
x---x---x---x---x
                ^
                |
               (tmp*, master) 

git reset --hard HEAD~2
x---x---x---x---x
        ^       ^
        |       |
      (tmp*) (master) 

git commit -amend 
      y (tmp*) 
     /
x---x---x---x---x
        |       ^
   (HEAD@1)   |
          (master) 

git rebase --onto tmp HEAD@1 master
    (tmp)
      y---x'---x' (master*) 
     /
x---x---x---x---x (only referenced in reflog)

【讨论】:

rebase --onto,见***.com/questions/1994463/… 何必呢? rebase -i 更简单 @CharlesB:我同意,rebase -i 更简单,但它也是交互式。这意味着您不能将其包含在脚本或对命令序列进行分组的别名中。 我创建了一个受此答案启发的 Bash 脚本:github.com/colinodell/git-amend-old 希望有人觉得它有用。 @ColinO'Dell 不错!我在答案中包含了指向您的脚本的链接,以提高知名度。【参考方案2】:

这是强大的git rebase -i 命令的工作。另请参阅 Git 书籍的 Interactive Rebasing 部分。

【讨论】:

可能是个愚蠢的问题,但git rebase -i 可以非交互使用吗? 不,不是这样。但是,git rebase -i 所做的一切(理论上)都可以使用其他可编写脚本的 Git 命令来完成。所以可以写一个脚本来修改之前的提交信息,但是我不知道这样的东西是否存在。 恭喜你获得第 15 枚金牌 ;) 你现在是一个真正的 git! (呃... git-guru,我的意思是)(我的意思是,关于工具名称 git 的大师)(我的意思是,你知道我的意思) @VonC:谢谢,这是一种偷偷摸摸的方式!

以上是关于如何在 git 中编辑任何提交的提交消息? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 git 中编辑不正确的提交消息(我已推送)?

如何使用“$ git commit”在消息开头引用问题(gitlab,github)? [复制]

如何在 git 分支中获取给定作者的提交消息历史记录? [复制]

如何在 Mercurial 中编辑不正确的提交消息? [复制]

如何跳过“git commit --amend”中的提交消息步骤? [复制]

如何在 git 存储库中重写提交者名称? [复制]