How to undelete a file previously deleted in git's history?

31,226

Solution 1

I got it:

git tag originalHead # just in case
git rebase -i <id of the parent of the commit that deleted the file>
# change pick to edit for that commit
git checkout <id of the previous commit> <filename> # thanks for reminding, kubi
git commit --amend
git rebase --continue
git tag -d originalHead

edit unfortunately this will leave all tags at the old timeline, see here

Solution 2

git checkout <commit> <filename>
Share:
31,226
Tobias Kienzler
Author by

Tobias Kienzler

Physicist.

Updated on February 01, 2020

Comments

  • Tobias Kienzler
    Tobias Kienzler about 4 years

    Using Chris's answer on another question I could prepend a snapshot-history to my git repository. Since one of the files is not part of my history but only in the snapshots, the first original commit now also contains the deletion of this file. How can I undo that?

    At first I thought this was the opposite of How do I remove sensitive files from git’s history, but actually I don't want to insert a file into history but just remove the deletion from history.

  • Tobias Kienzler
    Tobias Kienzler almost 14 years
    thanks, but that only restores it. I want history to look as if the file was never removed
  • HV Sharma
    HV Sharma about 4 years
    Seriously! git rebase -i <id of the parent of the commit that deleted the file> This saved my life
  • FreelanceConsultant
    FreelanceConsultant about 2 years
    What does it mean/what are the consequences of leaving all tags at the old timeline?
  • Tobias Kienzler
    Tobias Kienzler about 2 years
    @FreelanceConsultant Your log won't show them at the "proper" commits (also for git describe) and the originally tagged ones won't ever be removed by git clean. Using git diff (or any command actually) with tags will not compare the proper commits as well. Basically everything you do involving history will use the "wrong" commits in a way