如何通过创建修补程序将文件夹还原到特定提交

时间:2011-05-25 02:54:50

标签: git

这是我的文件夹'somefolder'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

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

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

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

2 个答案:

答案 0 :(得分:136)

您可以使用git checkout将存储库更新为特定状态。

git checkout e095 -- somefolder

至于你关于生成差异的问题,这也会有用。只需生成差异即可从当前状态返回e095

git diff 89cd..e095 -- somefolder

答案 1 :(得分:35)

您可以使用git reset重置索引,该索引还包括删除在最近提交的内容中添加的文件(git checkout就可以自行执行此操作):

git reset e095 -- somefolder

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

git checkout -- somefolder

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

git clean -fd somefolder