我刚开始学习今天如何使用git
,进展顺利。
作为实验,我使用push
上传两个目录(每个包含两个文件)和根目录中的两个文件。这很好。
然后我删除了我在本地的两个目录中的一个(但不是在git上)。当我使用git status
时,似乎意识到了这一点:
deleted: test/Testfile.as
deleted: test/Testile2.as
但是当我使用git pull
来恢复我的文件时,它们似乎没有返回到我的本地文件夹。我也试过git fetch
。
我似乎能够取回所有内容的唯一方法是git clone
,但这似乎不合逻辑,因为我需要在本地删除我的主目录,然后再次克隆它(或者指定一个新的克隆文件的位置。)
从github检索已在本地删除的文件和文件夹的适当方法是什么?
答案 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 pull
和git checkout
之外,git revert
也有助于取回已删除的文件
答案 4 :(得分:-1)
git reset --hard <commit hash>
表示HEAD将指向一个特定的提交,并且在该提交哈希之后您提交的任何提交都将不可用。这样做的原因是因为您将HEAD指向单独的提交HASH。如果你强行推,那么你将失去所有的提交。
注意:在git中使用git reset --hard
命令时要小心。