Skip to content

Instantly share code, notes, and snippets.

@nepsilon
Last active April 24, 2024 06:30
Show Gist options
  • Save nepsilon/156387acf9e1e72d48fa35c4fabef0b4 to your computer and use it in GitHub Desktop.
Save nepsilon/156387acf9e1e72d48fa35c4fabef0b4 to your computer and use it in GitHub Desktop.
How to change your commit messages in Git? — First published in fullweb.io issue #55

How to change your commit messages in Git?

At some point you’ll find yourself in a situation where you need edit a commit message. That commit might already be pushed or not, be the most recent or burried below 10 other commits, but fear not, git has your back 🙂.

Not pushed + most recent commit:

git commit --amend

This will open your $EDITOR and let you change the message. Continue with your usual git push origin master.

Already pushed + most recent commit:

git commit --amend
git push origin master --force

We edit the message like just above. But need to --force the push to update the remote history.

⚠️ But! Force pushing your commit after changing it will very likely prevent others to sync with the repo, if they already pulled a copy. You should first check with them.

Not pushed + old commit:

git rebase -i HEAD~X
# X is the number of commits to go back
# Move to the line of your commit, change pick into edit,
# then change your commit message:
git commit --amend
# Finish the rebase with:
git rebase --continue

Rebase opened your history and let you pick what to change. With edit you tell you want to change the message. Git moves you to a new branch to let you --amend the message. git rebase --continue puts you back in your previous branch with the message changed.

Already pushed + old commit:

Edit your message with the same 3 steps process as above (rebase -i, commit --amend, rebase --continue). Then force push the commit:

git push origin master --force

⚠️ But! Remember re-pushing your commit after changing it will very likely prevent others to sync with the repo, if they already pulled a copy. You should first check with them.

@shreyas1496
Copy link

@nepsilon This works like a charm.

@Juddd
Copy link

Juddd commented Jan 12, 2018

How to input you such emoji with text form?

@Juddd
Copy link

Juddd commented Jan 13, 2018

I use your method to change those message I have pushed successfully. But seem git rebase --continue don't work anymore? If I run it, it will put me a information like:

No rebase in progress?

@Juddd
Copy link

Juddd commented Jan 13, 2018

As the reminder, I think reword is more suitable for this target..

@kshitijgorde
Copy link

Thanks. It was helpful!

@gerome0123
Copy link

+1

@superche
Copy link

Thanks! It's really helpful! 👍

@divivu
Copy link

divivu commented May 22, 2018

Thanks for nice tip!

@brahbassim
Copy link

Very helpfull

@mgurnani
Copy link

Really helpful !!

@lokhandeomkar
Copy link

What will others have to do to be able to sync with the repo if they have already pulled?

@saso008
Copy link

saso008 commented Aug 4, 2018

I have two commit and use the (git rebase -i HEAD~2) for change commit two, and why give me the commit head for change?!
in other word , if (n) commit i don't change the commit (n).

@quannh02
Copy link

quannh02 commented Oct 8, 2018

Thank it helpful

@vsnthdev
Copy link

vsnthdev commented Nov 2, 2018

Thank you 👍

@code0wl
Copy link

code0wl commented Dec 7, 2018

Great gist!
You can also use git push --force-with-lease when force pushing to the branch if you are worried about not overriding other's work.

@ppant
Copy link

ppant commented Mar 12, 2019

Very good.. helpful. Thanks

@ggrrll
Copy link

ggrrll commented Mar 14, 2019

thanks!

@nadieenespecial
Copy link

nadieenespecial commented Apr 7, 2019

Trying to edit asd2 it give me an error.

commit asd1...
Author: ...
Date:   Sun Apr 7 11:47:46 2019 -0300

    3.32

commit asd2...
Author: ...
Date:   Sun Apr 7 10:52:53 2019 -0300

    X 3.31
git rebase -i HEAD~2
fatal: Needed a single revision
invalid upstream HEAD~2

Solution:
git rebase -i --root

@ithink20
Copy link

👍

@matteopallini-migacore
Copy link

thanks really handy

@MWhyte
Copy link

MWhyte commented Nov 3, 2019

Excellent. Thank you

@midoushitongtong
Copy link

👍 thanks

@csonuryilmaz
Copy link

If you add the --preserve-merges option (or its synonym, -p) to the git rebase -i command, then git will try to preserve the merges when rebasing, rather than linearizing the history.

This one worked for me because on GitLab we use "Merge commit" as merge method in which "every merge creates a merge commit".

@rishikeshjoshi
Copy link

Thank you.

@19007361
Copy link

19007361 commented Mar 4, 2020

Already pushed + most recent commit:

git commit --amend
git push origin master --force-with-lease

@leoiamele
Copy link

Thanks! This is really helpful!

@normancarcamo
Copy link

What if I want a commit using the hash?
is there any way to do that?

for example:

git commit -c [HASH] -m "new message"

just thinking though.

@fredriccliver
Copy link

👍

@Shivkumar13
Copy link

Hello,
What if I want to change the commit message which I have committed through the GitHub website directly.

So basically I don't have the commits locally, I just changed the code in GitHub UI and opened a PR.

How can I change that commit message? Any ideas?

@omaralamoudi
Copy link

These changes seem to apply to the commit message 1st paragraph or title. What if I wanted to reword the 2nd paragraph?

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment