2

所以很久以前,我在我的项目中添加了一个包含一组文件的文件夹 abc,并使用修订 xyz 进行了提交。在多次提交后,有人使用 git rm -r abc 删除了该文件夹。在此之后,也有很多提交。

现在我需要取回文件夹 abc。我愿意

git revert xyz

在此之后,我可以找到文件夹 xyz,但并非所有在提交 xyz 中添加的文件都存在。

我究竟做错了什么?我不想重置,因为我想保留提交 xyz 和现在之间的历史记录。

4

2 回答 2

5

你真正想要的是:

git checkout xyz -- abc

这就是说“让我得到 path 的东西的版本abc,就像它在提交中一样xyz”。这样,您的文件夹将恢复到您提交的状态,但您不会触及任何其他可能已被修改的文件。

--如果您明确指定提交,则不需要,除非提交的名称恰好也是您项目中的文件名。例如,如果您尝试检查HEAD从指向的提交master,你需要做git checkout master -- HEAD[只是节省自己的时间,不要命名你的分支和标记与你的文件相同的东西。]

您不想要,因为那是为了创建与其他提交相反的提交,而且您git revert xyz显然不想在一开始就反转添加文件。

于 2011-09-09T12:05:47.423 回答
3

git revert xyz不会将您的代码恢复到它在修订时的状态xyz- 它会创建一个新的提交来撤消xyz. 您可以尝试git cherry-pick --no-commit xyz,这将重播在 中完成的更改xyz(如果您省略--no-commit,它将自动成为新的提交,但也许您不希望在 中完成的所有内容xyz)。

于 2011-09-09T11:53:28.210 回答