'Change old commit message using `git rebase`
I was trying to edit an old commit message as explained here.
The thing is that now, when I try to run rebase -i HEAD~5 it says interactive rebase already started.
So then I try: git rebase --continue but got this error:
error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.
Any ideas?
Solution 1:[1]
As Gregg Lind suggested, you can use reword to be prompted to only change the commit message (and leave the commit intact otherwise):
git rebase -i HEAD~n
Here, n is the list of last n commits.
For example, if you use git rebase -i HEAD~4, you may see something like this:
pick e459d80 Do xyz
pick 0459045 Do something
pick 90fdeab Do something else
pick facecaf Do abc
Now replace pick with reword for the commits you want to edit the messages of:
pick e459d80 Do xyz
reword 0459045 Do something
reword 90fdeab Do something else
pick facecaf Do abc
Exit the editor after saving the file, and next you will be prompted to edit the messages for the commits you had marked reword, in one file per message. Note that it would've been much simpler to just edit the commit messages when you replaced pick with reword, but doing that has no effect.
Learn more on GitHub's page for Changing a commit message.
Solution 2:[2]
FWIW, git rebase interactive now has a reword option, which makes this much less painful!
Solution 3:[3]
Just wanted to provide a different option for this. In my case, I usually work on my individual branches then merge to master, and the individual commits I do to my local are not that important.
Due to a git hook that checks for the appropriate ticket number on Jira but was case sensitive, I was prevented from pushing my code. Also, the commit was done long ago and I didn't want to count how many commits to go back on the rebase.
So what I did was to create a new branch from latest master and squash all commits from problem branch into a single commit on new branch. It was easier for me and I think it's good idea to have it here as future reference.
From latest master:
git checkout -b new-branch
Then
git merge --squash problem-branch
git commit -m "new message"
Solution 4:[4]
Here's a very nice Gist that covers all the possible cases: https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4
Overview:
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
Solution 5:[5]
to change a commit messsage anywhere in history:
1- git rebase -i <commit_sha> , <commit_sha> is the sha of one commit before the commit to be changed

2- change pick to reword in first line
3- save and exit
4- next you'll see the commit message in another file, edit and then save and exit

and that's it, now the history is modified and a git push --force-with-lease will replace on remote
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dan Dascalescu |
| Solution 2 | Paolo |
| Solution 3 | piyush |
| Solution 4 | Mahmoud Zalt |
| Solution 5 |
