这是我的文件夹'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,然后应用该补丁。我怎么能这样做?
答案 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