How to modify existing, unpushed commits?
How to modify existing, unpushed commits?
I wrote the wrong thing in a commit message. Alternatively, I've forgotten to include some files.
How can I change the commit message/files? The commit has not been pushed yet.
This question's answers are a collaborative effort: if you see something that can be improved, just edit the answer to improve it! No additional answers can be added here
27 Answers
27
Amending the most recent commit message
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 you'll 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:
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Once you squash your commits - choose the e/r
for editing the message
e/r
When you use the git rebase -i HEAD~X
there can be more than X
commits. Git will "collect" all the commits in the last X
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 X+.
git rebase -i HEAD~X
X
X
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 rerere
git-commit(1) Manual Page
git-rebase(1) Manual Page
git-push(1) Manual Page
However
git commit --amend
isnt as powerful as git rebase -i
.– Jeffrey Jose
Jul 5 '10 at 8:40
git commit --amend
git rebase -i
@jeffjose, It definitely doesn't need to be. Also,
git commit --amend
can fix up the (a?) master commit.– strager
Jul 14 '10 at 6:02
git commit --amend
If you've already pushed, just force push again:
git push -f origin branchname
– hughes
May 2 '12 at 14:12
git push -f origin branchname
@hughes isn't
git push -f
a bit dangerous if other people are using the same repository?– Armand
Nov 8 '12 at 7:48
git push -f
If you don't want to rewrite the entire commit message, go for
git commit --amend -c HEAD
. This will open the editor pre-populated with your old commit message, so you can change it.– Sam
Nov 14 '12 at 15:38
git commit --amend -c HEAD
git commit --amend -m "your new message"
I did git commit --amend -m "New message", but pushing to Github generated the "Merge the remote changes before pushing again". After pull, commit --amend, and push again, the new message doesn't appear. Instead I have "Merge branch 'master' of github.com:[myrepo]"
– Dave Everitt
Oct 14 '11 at 16:58
@DaveEveritt you most likely pushed your commit upstream before trying to fix it.
– Thorbjørn Ravn Andersen
Apr 25 '13 at 8:21
@Kyralessa not true. In bash you can easily compose multiline commit messages by just not closing the quote until you're done (hitting return at the end of each line within the quotes).
– hobs
Jun 11 '13 at 21:11
I don't get how an answer that looks a lot like just the main idea of an answer that was written two years ago and also the accepted answer gets so many votes. Strange. (nothing wrong with the answer though)
– happy coder
Jan 15 '14 at 5:30
@AmalMurali, well. My point wasn't so much about the popularity of the question, nor the utility of the answer. But this particular answer is not the oldest answer, nor does it offer any further insight into the accepted answer. It appears to be a copy of a section of the accepted answer. That was my point. CHEERS!
– happy coder
May 21 '14 at 20:16
If the commit you want to fix isn’t the most recent one:
git rebase --interactive $parent_of_flawed_commit
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
reword
edit
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.
git rebase --interactive
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?
Can one change the message of the first commit (which doesn't have a parent)?
– 13ren
Jan 21 '10 at 19:57
This is mentioned in one of the other answers but I will put a note of it here. Since git 1.6.6 you can use
reword
in place of pick
to edit the log message.– MitMaro
May 31 '10 at 13:27
reword
pick
Incidentally,
$parent_of_flawed_commit
is equivalent to $flawed_commit^
.– Peeja
Nov 28 '10 at 23:26
$parent_of_flawed_commit
$flawed_commit^
Never EVER do this (or rebase in general) if you have already pushed upstream!
– Daniel Rinser
May 31 '11 at 19:14
Use
-p
(--preserve-merges
) if there was a merge after the flawed commit.– ahven
Jan 31 '12 at 14:37
-p
--preserve-merges
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 "Make the change you want" also from the editor opened by git commit --amend
git commit --amend
git rebase -i HEAD~commit_count
will also allow you to change the commit messages of however many commits you choose. Just mark the chosen commits as "reword" instead of "pick".– Joe
Aug 21 '13 at 20:21
git rebase -i HEAD~commit_count
What if you don't want to rebase? You just want to change an older message?
– SuperUberDuper
Apr 21 '16 at 8:56
git reset --hard
annihilates uncommitted changes. Please replace --hard
with --soft
.– eel ghEEz
Feb 28 at 17:44
git reset --hard
--hard
--soft
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 --amend
git commit -a --amend -m "My new commit message"
And if you don't want to add everything, you can first do
git add file.ext
then just git commit --amend
– MalcolmOcean
Sep 22 '15 at 5:56
git add file.ext
git commit --amend
You also can use git filter-branch
for that.
filter-branch
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.
git commit --amend
Note that this will try to rewrite EVERY commit between HEAD
and the flawed commit, so you should choose your msg-filter
command very wise ;-)
HEAD
msg-filter
Is there a version of this that does not change the commit if the regex doesn't find anything?
– sjakubowski
Mar 28 '13 at 20:08
AFAIK filter-branch --msg-filter will generate new commits in any case. However, you could check within the msg-filter, if the sed succeeded and use this information when the filter-branch operation ends to reset your tree to refs/original.
– Mark
Mar 29 '13 at 16:16
@DavidHogue This is only true when using the filter-branch method. The commit IDs following a modified commit do not change if you use the interactive rebase.
– Mark
Jul 6 '13 at 19:08
@Mark Yes they do, they are required to. Commit ids are dependent on previous commits. If they didn't change, git would be useless.
– Miles Rout
Jan 11 '14 at 4:45
You need
$flawed_commit^..HEAD
, not $flawed_commit..HEAD
. as stated by the man page: «The command will only rewrite the positive refs mentioned in the command line (e.g. if you pass a..b, only b will be rewritten).»– Ángel
Jul 29 '14 at 11:18
$flawed_commit^..HEAD
$flawed_commit..HEAD
I prefer this way.
git commit --amend -c <commit ID>
Otherwise, there will be a new commit with a new commit ID
For me, using your command above actually creates a new commit with a new commit ID plus an extra commit saying "merge branch" as a default commit message.
– Jan
Mar 29 '13 at 16:27
Amending always creates a new commit with a new commit ID. The commit ID is the SHA hash of the contents of the commit, including the commit message and authored/committed timestamps. This is a feature of Git that, barring hash collisions, ensures that two commits with the same ID are exactly the same commit, with exactly the same content, history and so on.
– Emil Lundberg
Jun 19 '13 at 9:30
Agree with Emil. Additionally, reading the docs - it seems that all "-c" does is tell git which commit's message to use as the default/template for your new commit..Really its already going to do "-c <commit ID>" by default, so no need to specify it.
– Gal
Sep 29 '13 at 19:12
The
-c
does a few things. It uses the old message by default, but it also copies authorship information (person and time). -C
does the same thing except that it does not ask you to edit the message.– Joseph K. Strauss
Dec 28 '14 at 2:55
-c
-C
Like @SantanuDey , it didn't work for me. I got
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
– Andrew Grimm
Apr 14 '15 at 5:22
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
If you are using the Git GUI tool, there is a button named amend last commit. Click on that button and then it will display your last commit files and message. Just edit that message and you can commit it with new commit message.
Or use this command from a console/terminal:
git commit -a --amend -m "My new commit message"
You can use Git rebasing. For example, if you want to modify back to commit bbc643cd, run
$ git rebase bbc643cd^ --interactive
In the default editor, modify 'pick' to 'edit' in the line whose commit you want to modify. Make your changes and then stage them with
$ git add <filepattern>
Now you can use
$ git commit --amend
to modify the commit, and after that
$ git rebase --continue
to return back to the previous head commit.
If you want to make sure your change from
git commit --amend
took affect you can use git show
and it will show the new message.– Steve Tauber
Feb 19 '13 at 20:12
git commit --amend
git show
If you only want to modify your last commit message, then do:
git commit --amend
That will drop you into your text exitor and let you change the last commit message.
If you want to change the last 3 commit messages, or any of the commit messages up to that point, supply HEAD~3
to the git rebase -i
command:
HEAD~3
git rebase -i
git rebase -i HEAD~3
This earlier answer already says that you can use
git commit --amend
, and it also says that you can use git rebase -i HEAD~commit_count
, all you did was plug in 3
for commit_count
.– user456814
Jul 23 '14 at 12:21
git commit --amend
git rebase -i HEAD~commit_count
3
commit_count
If you have to change an old commit message over multiple branches (i.e., the commit with the erroneous message is present in multiple branches) you might want to use:
git filter-branch -f --msg-filter
'sed "s/<old message>/<new message>/g"' -- --all
Git will create a temporary directory for rewriting and additionally backup old references in refs/original/
.
refs/original/
-f
will enforce the execution of the operation. This is necessary if the the temporary directory is already present or if there are already references stored under refs/original
. If that is not the case, you can drop this flag.
-f
refs/original
--
separates filter-branch options from revision options.
--
--all
will make sure, that all branches and tags are rewritten.
--all
Due to the backup of your old references, you can easily go back to the state before executing the command.
Say, you want to recover your master and access it in branch old_master
:
old_master
git checkout -b old_master refs/original/refs/heads/master
This answer doesn't address the OP's question, as they're purely interested in fixing a commit they've only just done. I regularly use
git commit --amend
to fix up comments or add files I forgot to git add
, but only ever before I've git push
ed. I also use git filter-branch
when I want to totally mess with the version history, but the OP doesn't want this, so this answer needs a big health warning - don't try this at home, peeps!!– kbro
Jun 29 '13 at 3:17
git commit --amend
git add
git push
git filter-branch
Use
git commit --amend
To understand it in detail, an excellent post is 4. Rewriting Git History. It also talks about when not to use git commit --amend
.
git commit --amend
Is there a good way to fix commit messages already pushed to a public repository? So far I have come to the conclusion that, once pushed, my commit message typos and thinkos have to live forever.
– stackunderflow
Jun 4 '13 at 11:32
In a word, NOPE! There is no GOOD way to retract something you have pushed. All retractions are BAD to a greater or lesser degree. You need to adopt the discipline of working in a branch in your own private repository, doing multiple commits as you add a bit, test a bit, tweak a bit. Then merge your entire branch into a single commit, write a new commit message describing the overall change, PROOFREAD it, and push.
– kbro
Jun 29 '13 at 3:29
Just to point out the obvious that one doesn't have to make a single commit when going back from a feature branch. What many people do is rebase on the target branch (to make things look clean) then merge with the option to suppress fast-forwarding. Agree with the main point of being careful before you push up though.
– ShawnFumo
Sep 11 '13 at 18:20
You have a couple of options here. You can do
git commit --amend
as long as it's your last commit.
Otherwise if it's not your last commit you can do an interactive rebase,
git rebase -i [branched_from] [hash before commit]
Then inside the interactive rebase you simply add edit to that commit. When it comes up do a git commit --amend
and modify the commit message. If you want to roll back before that commit point you could also use git reflog
and just delete that commit. Then you just do a git commit
again.
git commit --amend
git reflog
git commit
If you are using the Git GUI, you can amend the last commit which hasn't been pushed with:
Commit/Amend Last Commit
If it's your last commit, just amend the commit:
git commit --amend -o -m "New commit message"
(using the -o
(--only
) flag to make sure you change only the commit message)
-o
--only
If it's a buried commit, use the awesome interactive rebase:
git rebase -i @~9 # Show the last 9 commits in a text editor
Find the commit you want, change pick
to r
(reword
), and save and close the file. Done!
pick
r
reword
Miniature vim tutorial (or, how to rebase with only 8 keystrokes 3j
cw
r
EscZZ
):
3j
cw
r
ZZ
vimtutor
h
j
k
l
3j
i
c
u
r
dd
dw
dl
cc
cw
cl
dd
i
yy
yw
yl
p
P
:w
:q!
:wq
ZZ
If you edit text a lot, then switch to the Dvorak keyboard layout, learn to touch-type, and learn vim. Is it worth the effort? Yes.
ProTip™: Don't be afraid to experiment with "dangerous" commands that rewrite history* — Git doesn't delete your commits for 90 days by default; you can find them in the reflog:
$ git reset @~3 # go back 3 commits
$ git reflog
c4f708b HEAD@0: reset: moving to @~3
2c52489 HEAD@1: commit: more changes
4a5246d HEAD@2: commit: make important changes
e8571e4 HEAD@3: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* Watch out for options like --hard
and --force
though — they can discard data.
* Also, don't rewrite history on any branches you're collaborating on.
--hard
--force
I use the Git GUI as much as I can, and that gives you the option to amend the last commit:
Also, git rebase -i origin/master
is a nice mantra that will always present you with the commits you have done on top of master, and give you the option to amend, delete, reorder or squash. No need to get hold of that hash first.
git rebase -i origin/master
How do I get to that screen that you have displayed in your example?
– Marwan Marwan مروان مروان
Jun 24 '14 at 20:01
It's the lower right portion of the Windows Git Gui. Just select the 'Amend Last Commit' toggle, and it will populate with the most recent commit info.
– wbdarby
Jan 29 '16 at 16:51
Wow, so there are a lot of ways to do this.
Yet another way to do this is to delete the last commit, but keep its changes so that you won't lose your work. You can then do another commit with the corrected message. This would look something like this:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
I always do this if I forget to add a file or do a change.
Remember to specify --soft
instead of --hard
, otherwise you lose that commit entirely.
--soft
--hard
This does the exact same thing as
git commit --amend
except that it is a 2-step process.– Joseph K. Strauss
Dec 28 '14 at 2:58
git commit --amend
@JosephK.Strauss I believe ammending the commit also keeps original commit author and date information, having the new commiter and date info separately. I'm not sure this approach does that.
– everton
May 7 '16 at 23:13
@EvertonAgner You are correct.
--amend
will keep the author information, but the question only asks to change the message.– Joseph K. Strauss
May 9 '16 at 13:59
--amend
If you just want to edit the latest commit use:
git commit --amend
or
git commit --amend -m 'one line message'
But if you want to edit several commits in a row you should use rebasing instead:
git rebase -i <hash of one commit before the wrong commit>
In a file like the one above write edit/e or one of the other option and hit save and exit.
Now you'll be at the first wrong commit. Make changes in the files, and they'll be automatically staged for you. Type
git commit --amend
save and exit that and type
git rebase --continue
to move to next selection until finished with all your selections.
Note that these things change all your SHA hashes after that particular commit.
git rebase -i <hash of one commit before the wrong commit> works for me. thanks.
– Viraths
Apr 13 at 0:57
For anyone looking for a Windows/Mac GUI to help with editing older messages (i.e. not just the latest message), I'd recommend SourceTree. The steps to follow are below.
For commits that haven't yet been pushed to a remote:
...Or... for commits that have already been pushed:
Follow the steps in this answer, which are similar to above but require a further command to be run from the command line to force-push the branch - read it all and apply the necessary caution!
If you only want to change your last message you should use the --only
flag or its shortcut -o
with commit --amend
:
--only
-o
commit --amend
git commit --amend -o -m "New commit message"
This ensures that you don't accidentally enhance your commit with staged stuff. Of course it's best to have a proper $EDITOR
configuration. Then you can leave the -m
option out, and git will pre-fill the commit message with the old one. In this way it can be easily edited.
$EDITOR
-m
The "top" answer doesn't answer the question. It just gives a general introduction to
git commit --amend
. The question was very specific, therefore longer != better. The decisive mentioning of the -o
flag would probably be buried in the rest of the information. I'm also not comfortable editing an answer which has so many votes already.– David Ongaro
Jul 20 '14 at 20:51
git commit --amend
-o
That being said you're free to edit the top answer, since there is a real danger that people are using that as the "correct" answer. It can easily happen to amend your commit with staged stuff -- it happened to me, and it's really annoying when you happen to push that. But still, quantity is no guarantee for correctness. Neither in number of answers nor in number of votes.
– David Ongaro
Jul 20 '14 at 20:51
I wouldn't go so far to say that the top answer is "incorrect" and that it "doesn't answer the question". It definitely works and answers the question, you just need to make sure that you don't have staged changes when you try to amend. But I see your point about having to warn people about that. I'll edit it in later if I have time.
– user456814
Jul 21 '14 at 21:26
To be fair: even though the
--only
option with --amend
is available since git 1.3.0 it didn't work correctly till it was fixed in 1.7.11.3 (ea2d4ed35902ce15959965ab86d80527731a177c). So the right answer back in 2008 would probably have been something like: git stash; git commit --amend; git stash pop
.– David Ongaro
Jul 21 '14 at 23:00
--only
--amend
git stash; git commit --amend; git stash pop
Update your last wrong commit message with new commit message in one line:
git commit --amend -m "your new commit message"
Or, try git reset like below:
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# it will reset you last commit. Now, you
# can re-commit it with new commit message.
git reset
can help you to break one commit into multiple commits too:
git reset
# reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (you can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# add and commit your files seperately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
Here you have successfully broke your last commit into two commits.
If all you want to do is to edit the message of your last commit, using a soft reset for that purpose is over-kill. Just use
git commit --amend
, exactly like how it says in the top voted answer. Additionally, git reset --soft HEAD^
works identically to the soft reset in this earlier answer, because they both reset back to the first parent commit.– user456814
Jul 21 '14 at 23:15
git commit --amend
git reset --soft HEAD^
I only bother to add
git reset
in the solution just to give an idea to split one commit message into multiple commit messages. Because, I have faced that problem when, I was starting to use git
. Sometimes, this can be really helpfull. :)– przbadu
Jul 22 '14 at 6:29
git reset
git
On this question there are a lot of answers but none of them explains in super detail how to change older commit messages using VIM. I was stuck trying to do this myself, so here I'll write down in detail how I did this especially for people who have no experience in VIM!
I wanted to change my five latest commits that I already pushed to the server. This is quite 'dangerous' cause if someone else already pulled from this you can mess things up by changing the commit messages. However when you’re working on your own little branch and are sure no one pulled it you can change it like this:
Let's say you want to change your five latest commits, then you type this in the terminal:
git rebase -i HEAD~5
*Where 5 is the number of commit messages you want to change. (so if you want to change the 10th to last commit you type in 10)
git rebase -i HEAD~5
This command will get you into VIM there you can ‘edit’ your commit history.
You’ll see your last 5 commits at the top like this:
pick <commit hash> commit message
pick <commit hash> commit message
Instead of pick
you need to write reword
. You can do this in VIM by typing in i
, that makes you go in to INSERT-mode. (You see that you’re in insert mode by the word INSERT at the bottom) For the commits you want to change type in reword
instead of pick
pick
reword
i
reword
pick
Then you need to save and quit this screen, you do that by first going in to ‘command-mode’ by pressing the esc button. (you can check that you’re in command-mode if the word INSERT at the bottom has disappeared) Then you can type in a command by typing :
, the command to save and quit is wq
. So if you type in :wq
you’re ont he right track.
:
wq
:wq
Then VIM wil go over every commit message you want to reword, here you can actually change the commit messages. You’ll do this by going into INSERT-mode, changing the commit message, going into the command-mode and save and quit. Do this 5 times and you’re out of VIM!
Then, if you already pushed your wrong commits, you need to git push --force
to overwrite them. Remember that git push --force
is quite a dangerous thing to do, so make sure that no-one pulled from the server since you pushed your wrong commits!
git push --force
git push --force
Now you have changed your commit messages!
(As you see I'm not that experienced in VIM so if I used wrong 'lingo' to explain what's happening, feel free to correct me!)
<nitpick>
There are no "threads" on Stack Overflow, because it's not a discussion forum, there are only "questions", "answers", and "posts".</nitpick>
. Also, not all versions of Vim are the same, not all of them will let you delete characters in insertion mode (makes sense in a way, right?). If you want to always be able to delete characters in Vim, X
and x
will do that (little x
deletes characters in front of the cursor, X
will delete behind). If you make mistakes, you can use u
repeatedly to undo. Finally, r
is shorthand for reword
in the interactive rebase editor.– user456814
Aug 7 '14 at 17:47
<nitpick>
</nitpick>
X
x
x
X
u
r
reword
To change a word in vim is
cw
typed at its beginning (though the question is not about vim, I agree).– Yaroslav Nikitenko
Dec 5 '15 at 6:25
cw
I have added the alias of reci
, recm
for recommit (amend)
it, now I can do it with git recm
or git recm -m
.
reci
recm
recommit (amend)
git recm
git recm -m
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
You can use git-rebase-reword
It is designed to edit any commit (not just last) same way as commit --amend
commit --amend
$ git rebase-reword <commit-or-refname>
It is named after the action on rebase interactive to amend a commit: "reword". See this post and man -section interactive mode-
Examples:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
This requires installing an external program. In my opinion, it would be better to learn to use the built-in tools and aliases more effectively. I would type:
g c; g rb -i @~9
(commit and rebase), move the new commit to where I want it, change commit
to f
(fixup
), and save. If you wanted something faster than that, you could alias git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
– Zaz
Apr 29 '15 at 15:25
g c; g rb -i @~9
commit
f
fixup
git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
github.com/qxo/git-rebase-reword both for linux and windows
– qxo
Oct 29 '16 at 10:25
I realised that I had pushed a commit with a typo in it. In order to undo, I did the following:
git commit --amend -m "T-1000, advanced prototype"
git push --force
Warning: force pushing your changes will overwrite the remote branch with your local one. Make sure that you aren't going to be overwriting anything that you want to keep. Also be cautious about force pushing an amended (rewritten) commit if anyone else shares the branch with you, because they'll need to rewrite their own history if they have the old copy of the commit that you've just rewritten.
Nothing gets ever "overwritten" in git. In this case the branch pointer will be set to your new commit and the old commit will get stale if no references are left to it and it might get cleaned up after a few weeks. (Until then others still can find and reference it, e.g. by looking into the reflog.)
– David Ongaro
Sep 4 '14 at 23:47
I like to use the following:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
If you have not pushed the code to your remote branch (GitHub/Bitbucket) you can change the commit message on the command line as below.
git commit --amend -m "Your new message"
If you're working on a specific branch do this:
git commit --amend -m "BRANCH-NAME: new message"
If you've already pushed the code with the wrong message, and you need to be careful when changing the message. That is, after you change the commit message and try pushing it again, you end up with having issues. To make it smooth, follow these steps.
Please read my entire answer before doing it.
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
Important note: When you use the force push directly you might end up with code issues that other developers are working on the same branch. So to avoid those conflicts, you need to pull the code from your branch before making the force push:
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
This is the best practice when changing the commit message, if it was already pushed.
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
For those somewhat new to git: Laurie's point about having not yet pushed is important. Like rebasing, this is changing the history. If someone has cloned/pulled from your repo between the original and rewritten history then they won't be able to pull after the rewrite (for that branch).
– Pat Notz
Oct 10 '08 at 20:12