Re: Undo last commit?
From: Jakub Narebski <hidden>
Date: 2016-06-15 22:51:29
Mike [off-list ref] writes:
Hi fellow gitters, I have performed a 'git commit' on all 'added' files by mistake and now I want to undo this commit to return to the original state. Here's a more detailed description: 1. I did a 'git status' and there were files which I had 'added' ready for a commit. There were also some changes that had not been 'added' yet. See below: % git status # On branch master # Your branch is ahead of 'origin/master' by 7 commits. # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: cgi-bin/example1.php # modified: cgi-bin/example2.php # modified: example3.php # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: cgi-bin/example4.php # modified: example5.php # 2. I accidentally did a commit for ALL files because I forgot to specify the filename at the end of the commit. e.g. instead of 'commit -m "commit message" example3.php' I did 'commit -m "commit message"'.
You committed all staged changes (i.e. only those on "Changes to be committed" list), not all changes; for that you would need to use '-a' option to git commit. BTW. why are you using '-m' option?
3. I googled the problem and it seems everyone has a different way of doing this. (Maybe git is too confusing if everyone has different methods that all work slightly differently!?). Anyway I executed this command: % git commit --amend
You could simply use % git commit --amend -m "commit message" example3.php The `--amend` just means to fix (redo) last commit.
But I aborted this by exiting my text editor.
O.K.
4. I then tried: % git reset --hard HEAD~1
Errr... here you screwed up. This reset state of you working area to the state at last commit, removing all your changes to tracked files.
5. However now when I do a 'git status' none of the files that were original listed are there. A git status now gives this: # On branch master # Your branch is ahead of 'origin/master' by 7 commits. # nothing to commit (working directory clean) Any ideas how to rectify this issue? I presume the 'git commit --amend' just changes the commit message? I daren't try anything else myself in case I make matters worse.
You lost your changes to files on "Changed but not updated" list,
i.e. cgi-bin/example4.php and example5.php.
What you can do is go back to your last commit (the errorneous one) by
using
$ git reset --keep HEAD@{1}
Which means reset to last state (before 'git reset --hard HEAD~1'; you
can check it with "git reflog" or "git log -g"), keeping your local
changes (if you used '--keep' not '--hard' then you wouldn't loose
your changes).
Then redo this commit like you wanted to
$ git commit --amend -m "commit message" example3.php
Or better
$ git commit --amend -v example3.php
To check if you are committing correct changes.
...................
Alternatively check out state of example3.php from last made commit:
$ git checkout HEAD@{1} -- example3.php
Do your commit
$ git commit -m "commit message" example3.php
Get state of other files that you accidentally comitted from next to
last state of HEAD:
$ git checkout HEAD@{2} -- cgi-bin/example1.php cgi-bin/example2.php
Unfortunately changes to cgi-bin/example4.php and example5.php are
lost.
--
Jakub Narebski
Poland
ShadeHawk on #git