88

Is there a way to edit a commit message after committing and pushing to GitHub? I see that there is a 'add a note' as well as inline commenting, but no actual editing of a commit message. There is also 'amend commit' in git extensions but that doesn't edit the existing message.

125
  1. git rebase -i <commit hash you want to change>^

    This will open your default editor (usually ) with a list of commits and actions for each one. By default, the action is pick.

  2. For any commit you wish to change the message, change pick to reword.

  3. Save and quit (in vi: :wq).

  4. For each such commit, you'll get an editor to edit the commit message. Change it as you see fit, save and quit.

    Once you're done editing all the commit messages, you'll return to the command prompt, and have a new tree with the updated messages.

  5. You can now upload them to github by using git push origin --force.

If you just need to fix your last commit, you can replace steps 1-4 with git commit --amend.

  • 2
    @MatthewPeters I assume there should be a way, but I don't know - I use the commandline directly. – Mureinik May 15 '14 at 15:13
  • 2
    It does not seem that you can specify <commit hash you want to change>, rather you need to specify the hash of the commit preceding the one you want to change or use the HEAD~x where x is the number of commits from HEAD where the item you wish to change resides. – ssc327 Dec 18 '18 at 21:32
  • 2
    @ssc327 Note that I a ^ there - I indeed suggested rebasing on the parent of the commit you want to change. – Mureinik Dec 19 '18 at 5:16
  • 2
    @Murenik you are correct, I somehow missed seeing the ^ – ssc327 Dec 19 '18 at 11:41
  • 1
    @deadfish Using the Windows command line, you must type ^^ to end the command with a literal ^ e.g.: git rebase -i 2c747b32^^ – Wyck Feb 15 at 0:59
23

In Intellij Idea you can do it so easy.

  1. Open Version Control (History)
  2. Select log tab
  3. Select commit to change comment
  4. press F2 (Mac fn + F2), and update your commit message
  • 1
    What a good tool. – g10guang Nov 2 '18 at 3:21
  • Not working if you already pushed to remote. – paynd Nov 5 '18 at 10:45
  • 3
    You've got to execute git push origin --force afterwards as suggested in @Mureinik's answer. – Dan Macák Nov 15 '18 at 8:21
  • works perfect with android studio as well. – Rat-a-tat-a-tat Ratatouille Jan 9 at 16:57
  • The "reword" option is disabled if the commit has been pushed already. – huyz Jan 10 at 12:43
2

Another option is to create an additional "errata commit" (and push) which references the commit object that contains the error -- the new errata commit also provides the correction. An errata commit is a commit with no substantive code changes but an important commit message -- for example, add one space character to your readme file and commit that change with the important commit message, or use the git option --allow-empty. It's certainly easier and safer than rebasing, it doesn't modify true history, and it keeps the branch tree clean (using amend is also a good choice if you are correcting the most recent commit, but an errata commit may be a good choice for older commits). This type of thing so rarely happens that simply documenting the mistake is good enough. In the future, if you need to search through a git log for a feature keyword, the original (erroneous) commit may not appear because the wrong keyword was used in that original commit (the original typo) -- however, the keyword will appear in the errata commit which will then point you to the original commit that had the typo. Here's an example:

$ git log
commit 0c28141c68adae276840f17ccd4766542c33cf1d
Author: First Last 
Date:   Wed Aug 8 15:55:52 2018 -0600

    Errata commit:
    This commit has no substantive code change.
    THis commit is provided only to document a correction to a previous commit message.
    This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1
    Original incorrect commit message:
        Changed background color to red
    Correction (*change highlighted*):
        Changed background color to *blue*

commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
Author: First Last 
Date:   Wed Aug 8 15:43:16 2018 -0600

    Some interim commit message

commit e083a7abd8deb5776cb304fa13731a4182a24be1
Author: First Last 
Date:   Wed Aug 8 13:31:32 2018 -0600

    Changed background color to red
1

if your git-graph looks like ...

O   target-commit that you want to change its message [df9c192]
|
O   parent-commit [b7ec061]
|
O

(df9c192 and b7ec061 are the commit hashes of target-commit and parent-commit, separately)

you can just type the following instructions...

git reset --soft b7ec061
git commit -m "your_new_description"
git push -f

Explanation:

  1. git reset --soft b7ec061 will keep your changes of files and reset to parent-commit (i.e. b7ec061)
  2. git commit -m "..." will locally create a new commit
  3. git push -f will push your new commit to the server and replace the old one (i.e. df9c192)
New contributor
Alumi Lu is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.