删除.git文件夹后如何"只读" -recover本地GIT存储库和文件引用?

时间:2018-05-23 18:03:19

标签: linux git

作为备份的一种方法,我通过每隔一段时间提交一次新的更改,将文件夹结构推送到GIT存储库。在这种情况下,它是我的Linux用户的$ HOME文件夹的大部分内容。由于备份还包括各种应用程序的本地文件夹(例如邮件客户端,浏览器......),当然,即使在最近的git-push之后的几秒钟内,也会出现大量新的和未提交的更改。

碰巧,我意外地破坏了我的~/.git/文件夹(用另一个存储库中的~/.git/文件夹覆盖它,所以它真的不见了)。我希望通过从遥控器中克隆GIT历史记录来恢复它并保留所有文件'连接到他们的存储库对应部分,但不希望本地文件被git-clone或git-pull覆盖。我尝试使用.git/然后git fetch版本跟随this answer恢复git reset文件夹。所有四个命令都完成没有错误。但是,就我的本地存储库而言,我陷入了困境:

  • git branch -av显示正确的最后一次提交的正确远程主控 - 但;没有列出本地分支/主人。

  • git status显示:

    On branch master
    
    Initial commit
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
        [...]
    

    自上次提交以来,本地文件已更改,并且未列出git-push。

  • git log显示:fatal: your current branch 'master' does not have any commits yet

  • 我尝试存储本地更改,以便git-pull并重新应用存储;但是,git stash save会导致:

    fatal: bad revision 'HEAD'
    fatal: bad revision 'HEAD'
    fatal: Needed a single revision
    You do not have the initial commit yet
    
  • git checkout master中止:

    error: The following untracked working tree files would be overwritten by checkout:
        [...]
        [... looooong list of files and folders ...]
        [...]
    Please move or remove them before you can switch branches.
    Aborting
    
  • git rev-parse --abbrev-ref HEAD会导致&#34; HEAD&#34; - 它应该输出一个分支名称或&#34; master&#34;如果一切正常(我使用此命令将当前分支名称显示在bash&#39; s提示符中)。

有人能指出我如何恢复&#34;本地存储库和所有文件引用没有覆盖(未提交)更改? answer from the other topic中似乎缺少什么?

1 个答案:

答案 0 :(得分:1)

一个诀窍是将当前损坏的仓库(缺少.git的仓库)视为工作树(修改后的文件所在的位置)

将repo克隆到别处,然后将第一个工作树中的文件添加到第二个克隆的repo中:

cd /path/to/second/cloned/repo
git --work-tree=/path/to/first/repo add .
git commit -m "import work in progress"
git push