很久以前我在我的项目中添加了一个带有一组文件的文件夹abc,并使用修订版xyz进行了提交。 经过多次提交,有人用git rm -r abc删除了该文件夹。 在此之后,也有很多提交。
现在我需要取回文件夹abc。我做了
git revert xyz
在此之后,我可以找到文件夹xyz,但并不是提交xyz中添加的所有文件都存在。
我做错了什么?我不想重置,因为我想保持提交xyz和现在之间的历史。
答案 0 :(得分:5)
你真正想要的是:
git checkout xyz -- abc
这就是说“让我获取路径abc
中的内容版本,就像它在提交xyz
中一样”。这样,您将使文件夹恢复到您提交的状态,但是您不会触及任何其他可能已经修改过的文件。
(如果您明确指定了提交,则不需要--
,除非提交的名称恰好也是项目中的文件名。例如,如果您要检查HEAD
指向的提交中名为master
的文件的版本,您需要执行git checkout master -- HEAD
。 [只需节省时间,不要将您的名字命名为分支和标记与文件相同的内容。] )
您不希望git revert xyz
,因为这是用于创建反转其他提交的提交,而您显然不希望反向 添加文件首先。
答案 1 :(得分:3)
git revert xyz
不会将您的代码恢复到处于修订版xyz
的状态 - 它会创建一个新的提交撤消在{{1 }}。您可以尝试xyz
,重播在git cherry-pick --no-commit xyz
中完成的更改(如果您遗漏xyz
,它将自动成为新提交,但也许你不希望在--no-commit
)中完成所有事情。