【发布时间】:2016-10-20 13:03:42
【问题描述】:
我想从我的 git 存储库的历史记录中(递归地)恢复整个目录(完全像 this question)。
我知道正确的git命令是:
git checkout [tree-ish] -- path/to/the/folder
但是我有一个问题:要将现有目录恢复到提交状态,首先应该删除目录的内容。在其他情况下,不会删除旧提交中不存在的现有文件。 所以,要获得我想要的,我必须执行以下命令:
rm -Rf path/to/the/folder
git checkout [tree-ish] -- path/to/the/folder/
(参见this answer 和 cmets)。
我想知道是否有一个git-only命令来实现上述两个命令的相同行为,以避免手动制作rm。
编辑: 我不想在结帐后删除未跟踪的文件或清理,我没有它们。我想恢复一个文件夹,就像之前提交的一样,删除添加的文件,恢复删除的文件等等。
【问题讨论】:
-
你可以在
git checkout之后做“git clean -xdf”。 -
不,我不使用 rm 来删除我的 repo 中未跟踪的文件,我必须在结帐之前这样做才能进行“真正的”结帐:我想恢复我的文件夹完全处于某个提交之前的状态。如果我没有在 checkout 命令之前删除我的文件夹,我将处于混合情况,其中旧提交中不存在的现有文件仍在文件夹中
-
@Rowandish 我现在看到了。所以你想要
git checkout <tree-ish>的效果(没有任何路径)但是对于给定的路径/子目录,对吧? -
你想避免
rm的原因是什么?
标签: git restore git-checkout