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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.