如何通过创建补丁将文件夹恢复为特定的提交

这是我的文件夹“有些文件夹”的历史记录

$ git log somefolder


commit 89cd
More changes to somefolder


commit ef47a
Updating somefolder and other stuff


commit e095
Bugs fixed in somefolder

我想恢复一些文件夹回到“错误修复在一些文件夹”提交。

由于第二次提交涉及某个文件夹之外的更改,因此我不想恢复此提交。

我想最安全的方法是在提交 e095和89cd 之间创建一个只应用于某个文件夹的 diff/patch,然后应用该补丁。我该怎么做?

78850 次浏览

可以使用 Git 退房将存储库更新到特定的状态。

git checkout e095 -- somefolder

至于你关于产生差异的问题,那也可以。只需生成 diff,从当前状态返回到 e095:

git diff 89cd..e095 -- somefolder

您可以使用 git reset重置索引,其中还包括删除在最近的提交中添加的文件(git checkout本身不这样做) :

git reset e095 -- somefolder

但是,git reset不更新工作副本,而且 --hard选项不适用于文件夹。因此,使用 git checkout使工作副本与索引相同:

git checkout -- somefolder

然后,如果你还想删除添加的任何文件,你还需要做:

git clean -fd somefolder