threads / discuss / 12871

Undo git-rm without commit?

Subject: Undo git-rm without commit?

## tl;dr

6 messages between Mar 26, 2008 and Mar 26, 2008.

replies: 5people: 4as markdown or json

Joe Fiorini· Mar 26, 2008, 06:17 UTC · lore

I hadn't done a git-commit yet, but I used git-rm thinking it would remove files that I had just added. Instead, it deleted everything I had added from the disk. Is there a way to undo this? I'm doubtful, but would love to not have to rewrite what I was working on.

Thanks! Joe

Mike Hommey· Mar 26, 2008, 06:24 UTC · re: Joe Fiorini · lore

Re: Undo git-rm without commit?

On Wed, Mar 26, 2008 at 02:17:18AM -0400, Joe Fiorini wrote:
> I hadn't done a git-commit yet, but I used git-rm thinking it would  
> remove files that I had just added.  Instead, it deleted everything I  
> had added from the disk.  Is there a way to undo this?  I'm doubtful,  
> but would love to not have to rewrite what I was working on.

Your best take would be to take a look at the unreachable loose objects in your repository. One way to have a list of them would be to do a git prune -n. Then you can look at the contents of each blob in those with either git cat-file -p $sha1, or git show $sha1.

Mike
PS: What you wanted to use is git reset, not git rm.
Jeff King· Mar 26, 2008, 06:26 UTC · re: Joe Fiorini · lore

Re: Undo git-rm without commit?

On Wed, Mar 26, 2008 at 02:17:18AM -0400, Joe Fiorini wrote:
> I hadn't done a git-commit yet, but I used git-rm thinking it would  
> remove files that I had just added.  Instead, it deleted everything I had 
> added from the disk.  Is there a way to undo this?  I'm doubtful, but 
> would love to not have to rewrite what I was working on.

If by "added" you mean "git add"ed, then yes. The file is hashed and the blob is put in the object database during the add. Unfortunately, nothing actually _refers_ to it, so you will have to pick it out manually by its hash. Try:

  git fsck --lost-found
and then poke around .git/lost-found/other for your missing content.

As an aside, didn't git-rm warn you? While confirming that the command I was giving you was correct, I did this:

  git init
  echo content >file
  git add file
  git rm file
and got:
  error: 'file' has changes staged in the index
  (use --cached to keep the file, or -f to force removal)
-Peff
Joe Fiorini· Mar 26, 2008, 06:38 UTC · re: Jeff King · lore

Re: Undo git-rm without commit?

Yeah, it warned me, I wasn't being careful enough. I guess I didn't think it would remove from the working tree, just the repository. My err for not reading the docs until _after_ the mistake. Live & learn. Thanks for the help, opening lost-found/other in TextMate solved my problem quickly!

Thanks again! Joe

On Mar 26, 2008, at 2:26 AM, Jeff King wrote:
Show 33 quoted lines
> On Wed, Mar 26, 2008 at 02:17:18AM -0400, Joe Fiorini wrote:
>
>> I hadn't done a git-commit yet, but I used git-rm thinking it would
>> remove files that I had just added.  Instead, it deleted everything  
>> I had
>> added from the disk.  Is there a way to undo this?  I'm doubtful, but
>> would love to not have to rewrite what I was working on.
>
> If by "added" you mean "git add"ed, then yes. The file is hashed and  
> the
> blob is put in the object database during the add. Unfortunately,
> nothing actually _refers_ to it, so you will have to pick it out
> manually by its hash. Try:
>
>  git fsck --lost-found
>
> and then poke around .git/lost-found/other for your missing content.
>
> As an aside, didn't git-rm warn you? While confirming that the  
> command I
> was giving you was correct, I did this:
>
>  git init
>  echo content >file
>  git add file
>  git rm file
>
> and got:
>
>  error: 'file' has changes staged in the index
>  (use --cached to keep the file, or -f to force removal)
>
> -Peff
Jeff King· Mar 26, 2008, 06:39 UTC · re: Joe Fiorini · lore

Re: Undo git-rm without commit?

On Wed, Mar 26, 2008 at 02:38:42AM -0400, Joe Fiorini wrote:
Show 5 quoted lines
> Yeah, it warned me, I wasn't being careful enough.  I guess I didn't  
> think it would remove from the working tree, just the repository.  My err 
> for not reading the docs until _after_ the mistake.  Live & learn.  Thanks 
> for the help, opening lost-found/other in TextMate solved my problem 
> quickly!
OK, good. Just making sure there wasn't a bug in rm. ;)
-Peff
Matthieu Moy· Mar 26, 2008, 09:48 UTC · re: Joe Fiorini · lore

Re: Undo git-rm without commit?

Joe Fiorini <joe@faithfulgeek.org> writes:
> Yeah, it warned me, I wasn't being careful enough.  I guess I didn't
> think it would remove from the working tree, just the repository.  My
> err for not reading the docs until _after_ the mistake.
Reading the error message would have done it also :-\.
>>  error: 'file' has changes staged in the index
>>  (use --cached to keep the file, or -f to force removal)
         ^^^^^^^^^^^^^^^^^^^^^^^^^
Good luck with lost+found, still !
-- 
Matthieu

← back to recent threads