【发布时间】:2018-05-24 02:26:32
【问题描述】:
作为一种备份方式,我通过每隔一段时间提交新的更改将文件夹结构推送到 GIT 存储库。在这种情况下,它是我的 Linux 用户 $HOME 文件夹的大部分内容。由于备份还包括各种应用程序(例如邮件客户端、浏览器等)的本地文件夹,因此,即使在最近的 git-push 几秒钟后,自然也会有一大堆新的和未提交的更改。
碰巧,我不小心破坏了我的~/.git/ 文件夹(用另一个存储库中的~/.git/ 文件夹覆盖了它,所以它真的消失了)。我想通过从远程克隆 GIT 历史记录来恢复它,并保留所有文件与其存储库对应部分的连接,但不希望本地文件被 git-clone 或 git-pull 覆盖。我尝试按照this answer 恢复.git/ 文件夹,使用git fetch 然后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结果为“HEAD”——如果一切正常,它应该输出一个分支名称或“master”(我使用此命令在 bash 的提示符中显示当前分支名称)。
有人可以为我指出一个有用的方向,即如何在不覆盖(未提交)更改的情况下“恢复”本地存储库和所有文件引用? answer from the other topic 中似乎缺少什么?
【问题讨论】:
-
将存储库克隆到一个单独的文件夹,检查您要继续的分支,这将准备好包含所有正确引用的 .git 文件夹。然后将 .git 文件夹从这个单独的文件夹移到正确的位置,并且只有 .git 文件夹。如果您现在在真实文件夹中执行
git status,您将获得状态,就好像您刚刚将所有文件更改为它们当前的状态,与存储库认为它们应该是什么相比。然后,您应该可以从上次中断的地方继续。 -
谢谢 Lasse 和 VonC。是的,我考虑过这一点,但希望不必如此,因为我担心克隆时磁盘空间会用完。 :D