作为备份的一种方式,我通过每隔一段时间提交新更改将文件夹结构推送到 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/