I wrote the wrong thing in a commit message.
How can I change the message? The commit has not been pushed yet.
Find the commit you want, change pick to e ( edit ), and save and close the file. Git will rewind to that commit, allowing you to either: use git commit --amend to make changes, or.
Changing the latest Git commit message If the message to be changed is for the latest commit to the repository, then the following commands are to be executed: git commit --amend -m "New message" git push --force repository-name branch-name.
git commit --amend
will open your editor, allowing you to change the commit message of the most recent commit. Additionally, you can set the commit message directly in the command line with:
git commit --amend -m "New commit message"
…however, this can make multi-line commit messages or small corrections more cumbersome to enter.
Make sure you don't have any working copy changes staged before doing this or they will get committed too. (Unstaged changes will not get committed.)
If you've already pushed your commit up to your remote branch, then - after amending your commit locally (as described above) - you'll also need to force push the commit with:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Warning: force-pushing will overwrite the remote branch with the state of your local one. If there are commits on the remote branch that you don't have in your local branch, you will lose those commits.
Warning: be cautious about amending commits that you have already shared with other people. Amending commits essentially rewrites them to have different SHA IDs, which poses a problem if other people have copies of the old commit that you've rewritten. Anyone who has a copy of the old commit will need to synchronize their work with your newly re-written commit, which can sometimes be difficult, so make sure you coordinate with others when attempting to rewrite shared commit history, or just avoid rewriting shared commits altogether.
Another option is to use interactive rebase. This allows you to edit any message you want to update even if it's not the latest message.
In order to do a Git squash, follow these steps:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
Once you squash your commits - choose the e/r
for editing the message:
When you use git rebase -i HEAD~n
there can be more than n commits. Git will "collect" all the commits in the last n commits, and if there was a merge somewhere in between that range you will see all the commits as well, so the outcome will be n + .
If you have to do it for more than a single branch and you might face conflicts when amending the content, set up git rerere
and let Git resolve those conflicts automatically for you.
git-commit(1) Manual Page
git-rebase(1) Manual Page
git-push(1) Manual Page
git commit --amend -m "your new message"
As already mentioned, git commit --amend
is the way to overwrite the last commit. One note: if you would like to also overwrite the files, the command would be
git commit -a --amend -m "My new commit message"
If the commit you want to fix isn’t the most recent one:
git rebase --interactive $parent_of_flawed_commit
If you want to fix several flawed commits, pass the parent of the oldest one of them.
An editor will come up, with a list of all commits since the one you gave.
pick
to reword
(or on old versions of Git, to edit
) in front of any commits you want to fix.For each commit you want to reword, Git will drop you back into your editor. For each commit you want to edit, Git drops you into the shell. If you’re in the shell:
git commit --amend
git rebase --continue
Most of this sequence will be explained to you by the output of the various commands as you go. It’s very easy; you don’t need to memorise it – just remember that git rebase --interactive
lets you correct commits no matter how long ago they were.
Note that you will not want to change commits that you have already pushed. Or maybe you do, but in that case you will have to take great care to communicate with everyone who may have pulled your commits and done work on top of them. How do I recover/resynchronise after someone pushes a rebase or a reset to a published branch?
To amend the previous commit, make the changes you want and stage those changes, and then run
git commit --amend
This will open a file in your text editor representing your new commit message. It starts out populated with the text from your old commit message. Change the commit message as you want, then save the file and quit your editor to finish.
To amend the previous commit and keep the same log message, run
git commit --amend -C HEAD
To fix the previous commit by removing it entirely, run
git reset --hard HEAD^
If you want to edit more than one commit message, run
git rebase -i HEAD~commit_count
(Replace commit_count with number of commits that you want to edit.) This command launches your editor. Mark the first commit (the one that you want to change) as “edit” instead of “pick”, then save and exit your editor. Make the change you want to commit and then run
git commit --amend
git rebase --continue
Note: You can also "Make the change you want" from the editor opened by git commit --amend
You also can use git filter-branch
for that.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
It's not as easy as a trivial git commit --amend
, but it's especially useful, if you already have some merges after your erroneous commit message.
Note that this will try to rewrite every commit between HEAD
and the flawed commit, so you should choose your msg-filter
command very wisely ;-)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With