如何在git中编辑任何提交的提交消息?

Mot*_*Mot 8 git commit-message

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

Gre*_*ill 6

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

  • 不,不是这样的.但是,`git rebase -i`所做的一切都可以(理论上)使用其他可编写脚本的Git命令完成.因此,可以编写一个脚本来修改先前的提交消息,但我不知道是否存在这样的事情. (2认同)

Von*_*onC 6

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

git checkout -b tmp
git reset --hard HEAD~2
git commit -amend 
git rebase --onto tmp HEAD@{1} master
Run Code Online (Sandbox Code Playgroud)

那就像:

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)
Run Code Online (Sandbox Code Playgroud)

  • @CharlesB:我同意,`rebase -i`更简单,但它也*交互*.这意味着您不能将其包含在脚本或别名组合命令序列中. (2认同)