您的位置:首页 > 其它

在commit之前撤销git add操作 (undo git add before commit)

2012-03-15 22:51 495 查看
http://stackoverflow.com/questions/348170/undo-git-add-before-commit

I mistakenly added files using the command
git add file


I have not yet
run
git
commit
.

Is there a way to undo this or remove these files from the commit?

You want:
git rm --cached <added_file_to_undo>


Reasoning:

Also a newbie I first tried
git reset .


(to undo my entire initial add) only to get this (not so) helpful message:
fatal: Failed to resolve 'HEAD' as a valid ref.


turns out that this is because the HEAD ref (branch?) doesn't exist until after the first commit. That is, you'll run into the same newbie problem as me if your workflow, like mine, was something like:

cd to my great new project directory to try out git, the new hotness

git
init


git
add .


git
status


... lots of crap scrolls by ...

=> Damn, I didn't want to add all of that.

google "undo git add"

=> find Stackoverflow - yay

git
reset .


=> fatal: Failed to resolve 'HEAD' as a valid ref.
it further turns out that there's a bug logged against the unhelpfulness of this in
the mailing list.

And that the correct solution was right there in the git status output (which, yes, I glossed over as 'crap)

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...


And the solution indeed is to use
git
rm --cached FILE


Note the warnings elsewhere here -
git
rm
deletes your local working copy of the file, but not if
you use --cached. Here's the result of git help rm`:

--cached Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left.

I proceed to use
git rm --cached .


to remove everything and start again. Didn't work though, because while
add
.
is recursive, turns out
rm
needs
-r
to
recurse. sigh.
git rm -r --cached .


Okay, now I'm back to where I started. Next time I'm going to use
-n
to
do a dry run and see what will be added:
git add -n .


UPDATE Oh yeah forgot to mention - I zipped up everything to a safe place before trusting
git
help rm
about the
--cached
not
destroying anything (and what if I misspelled it)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: