如何还原通过裸仓库启动的git工作仓库?

时间:2018-06-22 23:35:06

标签: git

我在Windows 10文件夹上有一个裸仓库。这个裸仓库已经使用了一段时间,并进行了数十次提交。偶然地,今天,我跑了

git status
fatal: this operation must be run in a work tree
git init
git add .
git commit -m "initial commit"

就可以了。

因此,我在之前的裸仓库中创建了一个工作仓库。现在,如果我尝试克隆它,我最终会从工作仓库中克隆文件,这些文件是裸仓库中的原始文件,而不是工作文件。

我想删除我启动的这个工作仓库,同时保持原始裸仓库不变。

我该怎么做?通过查看它们的时间戳,我可以看到更改过的文件,但这足够吗?恐怕我可能已经覆盖了某些内容,并且删除将危害所有内容。

谢谢。

1 个答案:

答案 0 :(得分:1)

“裸”存储库如下所示:

$ git init --bare
Initialized empty Git repository in .../tmp/tbare/
$ ls -AF
HEAD            config          hooks/          objects/
branches/       description     info/           refs/

您可能还有一些其他文件和/或目录,包括indexlogs,这取决于您一直在做什么。

在该裸仓库中运行git init会添加一个.git目录,这样您现在就有两个 Git仓库:当前目录中的裸仓库和{{ 1}}非裸目录,当前目录为其工作树:

.git

bare 存储库中没有任何更改,但是现在$ git init Initialized empty Git repository in .../tmp/tbare/.git/ $ ls -AF .git/ branches/ description info/ refs/ HEAD config hooks/ objects/ 找到了git ...目录并使用了该目录。如果您希望使用裸仓库,则必须告诉Git不要看.git而是看.git

.

如果您只是删除 $ git --git-dir=. status fatal: This operation must be run in a work tree $ git status | head -1 On branch master 目录,则Git返回到无法找到.git,而是使用.git来获取裸存储库的情况。 :

.

现在一切都恢复了以前的状态—您已经删除了其他存储库(及其所有提交,因为它们包含的有用内容也没有包含在其工作树中,该存储树是原始存储库)。

要获得温暖的模糊感觉,请在除去$ rm -rf .git $ ls -AF HEAD config hooks/ objects/ branches/ description info/ refs/ $ git status fatal: This operation must be run in a work tree 之前运行.git。在执行任何操作之前,您应该查看裸存储库持有的所有提交。