From: Jakub Narebski <jnareb@gmail.com>
To: Mike <xandrani@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Undo last commit?
Date: Sat, 18 Jun 2011 06:54:50 -0700 (PDT) [thread overview]
Message-ID: <m31uyrutx7.fsf@localhost.localdomain> (raw)
In-Reply-To: <BANLkTinWujKYvx_fh2iBDOdMbywqzfgwUA@mail.gmail.com>
Mike <xandrani@gmail.com> 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
next prev parent reply other threads:[~2011-06-18 13:56 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-18 13:15 Undo last commit? Mike
2011-06-18 13:43 ` Ben Walton
2011-06-18 13:48 ` Ramkumar Ramachandra
2011-06-18 13:54 ` Jakub Narebski [this message]
2011-06-19 0:37 ` Jonathan Nieder
2011-06-19 10:37 ` Jakub Narebski
2011-06-20 12:08 ` Massimo Manca
2011-06-28 13:57 ` Holger Hellmuth
2011-06-28 14:31 ` Mike
2011-06-30 4:50 ` Ramkumar Ramachandra
2011-06-30 18:38 ` Jonathan Nieder
2011-06-30 19:48 ` Mike
2011-06-30 17:29 ` Junio C Hamano
2012-02-11 18:19 ` Neal Kreitzinger
[not found] ` <CAHK-92oMc62O0S8Bxt6+uxobE+kg5wOeRDoOsHWvvenXaXmZGQ@mail.gmail.com>
2012-02-11 22:07 ` Jakub Narebski
2012-02-11 22:29 ` Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m31uyrutx7.fsf@localhost.localdomain \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
--cc=xandrani@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).