linux - 如何在删除 .git 文件夹后 "read-only"- 恢复本地 GIT 存储库和文件引用?

标签 linux git

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

碰巧,我不小心破坏了我的 ~/.git/ 文件夹(用另一个存储库中的 ~/.git/ 文件夹覆盖了它,所以它真的不见了).我想通过从远程克隆 GIT 历史来恢复它,并保留所有文件与其存储库对应部分的连接,但不希望本地文件被 git-clone 或 git-pull 覆盖。我尝试按照 this answer 恢复 .git/ 文件夹,使用 git fetch 然后 git reset 版本。所有四个命令都已完成且没有错误。但是,就我的本地存储库而言,我陷入了某种困境:

  • git branch -av 显示正确的远程主机,其中包含正确的最后一次提交 - 但那个;没有列出本地 branch/master。

  • 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 结果为“HEAD”——它应该输出分支名称或“master” 如果一切正常(我使用这个命令让当前分支名称显示在 bash 的提示符中)。

有人能给我指出一个有用的方向,告诉我如何在不覆盖(未提交)更改的情况下“恢复”本地存储库和所有文件引用吗? answer from the other topic 中似乎缺少什么?

最佳答案

一个技巧是将您当前损坏的存储库(缺少 .git 的存储库)视为工作树(您修改的文件所在的位置)

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

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

关于linux - 如何在删除 .git 文件夹后 "read-only"- 恢复本地 GIT 存储库和文件引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50494751/

相关文章:

node.js - 在kali linux上安装node失败

git - 如何判断你是否在 git-svn repo 命令行中?

git - 从文件夹创建子模块存储库并保留其 git 提交历史

Git说本地分支在远程分支后面,但事实并非如此

c - 在哪里放置用于从共享内存段读取和写入的信号量?

python - 在python中拆分一个变量表

Linux - 使用 wine 运行 .exe 时避免 x 服务器消息

c - 为什么 lseek 在 ubuntu 中以追加模式失败

git浅克隆到特定标签

Git 推送失败。错误 : RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, 错误号 60