如何通过创build补丁来将文件夹恢复到特定的提交

这是我的文件夹“somefolder”

$ git log somefolder commit 89cd More changes to somefolder commit ef47a Updating somefolder and other stuff commit e095 Bugs fixed in somefolder 

我想将某些文件夹还原为“修复某些文件夹中的错误”提交。

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

我想最安全的方法是在提交e095和89cd之间创build一个仅适用于某个文件夹的diff / patch,然后应用该补丁。 我怎样才能做到这一点?

你可以使用git checkout来更新你的版本库到一个特定的状态。

 git checkout e095 -- somefolder 

至于你有关生成差异的问题,那也可以。 只需生成差异即可从当前状态返回到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