如何使用 Git 将单个子文件夹恢复到特定日期而不影响其他人?

How to restore a single subfolder to specific date without affecting others using Git?

我有一个 Git 存储库,其中包含整个文件夹结构,我想将 其中一个 (不是全部)重置为它在 在特定时间,但我不想影响存储库的任何其他 files/folders。

如何使用 Git 实现此目的?

假设我的 root/ 文件夹中有 Git 个存储库,其中包含:

root/
root/FolderA/
root/FolderB/sub1/
root/FolderB/sub2/
root/FolderC/

我想将 root/FolderB/ 及其所有内容恢复到 2018 年 1 月 1 日的状态,但我不想更改其他文件夹的内容。

请注意,我通常使用 UI 前端 (Git Extensions),因此我不经常从命令行使用 GIT。总的来说,我也不是很精通GIT。

此命令将从 2018 年 1 月 2 日之前的最后一次提交恢复 root/FolderB/ 的版本:

git checkout $(git rev-list -n 1 --before="2018-01-02 00:00" master)^ -- root/FolderB/

解释:

  • git rev-list -n 1 --before="2018-01-02 00:00" master: 获取 2018 年 1 月 2 日之前最后一次提交的哈希值
  • git checkout <commit-hash>^ master -- root/FolderB/:从 <commit-hash> 恢复 master 分支上的 root/FolderB/