作为备份的一种方法,我通过每隔一段时间提交一次新的更改,将文件夹结构推送到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中似乎缺少什么?
答案 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