为什么git pull没有带回我删除的目录?

时间:2012-02-16 03:56:44

标签: git

我刚开始学习今天如何使用git,进展顺利。

作为实验,我使用push上传两个目录(每个包含两个文件)和根目录中的两个文件。这很好。

然后我删除了我在本地的两个目录中的一个(但不是在git上)。当我使用git status时,似乎意识到了这一点:

  

deleted: test/Testfile.as
  deleted: test/Testile2.as

但是当我使用git pull来恢复我的文件时,它们似乎没有返回到我的本地文件夹。我也试过git fetch

我似乎能够取回所有内容的唯一方法是git clone,但这似乎不合逻辑,因为我需要在本地删除我的主目录,然后再次克隆它(或者指定一个新的克隆文件的位置。)

从github检索已在本地删除的文件和文件夹的适当方法是什么?

5 个答案:

答案 0 :(得分:56)

git pull只是在工作目录中合并获取的提交,并且不会恢复已删除的目录(但可能会警告您有关冲突的信息。)

如果您删除了工作目录中的文件夹,则必须执行以下操作:

git checkout -- test

将其取回。

或者您可以git reset --hard将您的工作目录完全置于HEAD状态。

答案 1 :(得分:14)

您希望将存储库返回到以前的工作版本。这是git-reset的工作。

git reset --hard

请务必仔细阅读此useful explanation of git-reset

如果您愿意,也可以查看这些文件:

git checkout -- test/

答案 2 :(得分:3)

git pull将合并更改。把它想象成你修改过的文件。如果您修改了它,则git pull不会用遥控器副本替换文件的内容。即使存在相互冲突的变化,它也会警告你快速前进。

如果您的存储库处于删除是唯一未提交的更改的状态,并且您要撤消它,那么执行git reset head --hard

或者,如果您要进行其他更改,请执行git checkout -- test

答案 3 :(得分:1)

除了git pullgit checkout之外,git revert也有助于取回已删除的文件

答案 4 :(得分:-1)

git reset --hard <commit hash>表示HEAD将指向一个特定的提交,并且在该提交哈希之后您提交的任何提交都将不可用。这样做的原因是因为您将HEAD指向单独的提交HASH。如果你强行推,那么你将失去所有的提交。

注意:在git中使用git reset --hard命令时要小心。