这是我的文件夹'somefolder'的历史
$ git log somefolder
commit 89cd
More changes to somefolder
commit ef47a
Updating somefolder and other stuff
commit e095
Bugs fixed in somefolder
Run Code Online (Sandbox Code Playgroud)
我想将一些文件夹还原为"在某个文件夹中修复的错误"提交.
由于第二次提交涉及到某些文件夹之外的更改,因此我不想还原此提交.
我想最安全的方法是在commit e095和89cd之间创建一个仅适用于某个文件夹的diff/patch,然后应用该补丁.我怎样才能做到这一点?
jam*_*san 140
您可以使用git checkout将存储库更新为特定状态.
git checkout e095 -- somefolder
Run Code Online (Sandbox Code Playgroud)
至于你关于生成差异的问题,那也可以.只需生成差异即可从当前状态返回到e095:
git diff 89cd..e095 -- somefolder
Run Code Online (Sandbox Code Playgroud)
Mat*_*ett 42
您可以使用git reset重置索引,该索引还将包括删除在最近提交中添加的文件(git checkout在它自己不执行此操作时):
git reset e095 -- somefolder
Run Code Online (Sandbox Code Playgroud)
但是git reset,不更新工作副本,该--hard选项不适用于文件夹.然后使用git checkout使工作副本与索引相同:
git checkout -- somefolder
Run Code Online (Sandbox Code Playgroud)
然后,如果你还想删除任何添加的文件,你还需要todo:
git clean -fd somefolder
Run Code Online (Sandbox Code Playgroud)