Reputation: 16476
I've deleted a file with Git and then committed, so the file is no longer in my working copy. I want to look at the contents of that file, but not actually restore it. How can I do this?
Upvotes: 135
Views: 34390
Reputation: 8630
Here is a way to find a file that was deleted long ago, even if you don't remember the exact name and/or path:
git log --stat=1000 --full-history -- "**/*partial_file_name*.*"
--stat=1000
lists all the files in the commits. The 1000
ensures you'll see the entire relative path to the deleted file (https://stackoverflow.com/a/10460154/99717)--full-history
shows the reverse commit history for the file, starting with the delete commit.This way, you can also search for a specific file version in a specific commit by scanning the messages and history.
With the commit hash, you can view the file using:
git show COMMIT_HASH:entire/relative/path/to/deleted_file_name.ext
Getting the relative path right is important, else git will tell you it can't find that path. Also, you have to use a commit hash before the actual file delete commit, which will have nothing, because git show
shows you the version of the file in that commit.
Upvotes: 5
Reputation: 151441
If this is a file you've deleted a while back and don't want to hunt for a revision, you can use (the file is named foo
in this example; you can use a full path):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
The rev-list
invocation looks for all the revisions of foo
but only lists one. Since rev-list
lists in reverse chronological order, then what it lists is the last revision that changed foo
, which would be the commit that deleted foo
. (This is based on the assumption that git does not allow a deleted file to be changed and yet remain deleted.) You cannot just use the revision that rev-list
returns as-is because foo
no longer exists there. You have to ask for the one just before it which contains the last revision of the file, hence the ^
in git show
.
Upvotes: 72
Reputation: 1379
Since you might not recall the exact path, you can instead get the sha1 from git log then you can simply issue
git cat-file -p <sha1>
Upvotes: 11
Reputation: 792477
git show HEAD^:path/to/file
You can use an explicit commit identifier or HEAD~n
to see older versions or if there has been more than one commit since you deleted it.
Upvotes: 182