这是我的文件夹“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 之间创建一个仅适用于某个文件夹的差异/补丁,然后应用该补丁。我怎样才能做到这一点?
您可以使用 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
git restore
命令是将文件和目录恢复到不同提交时的状态的命令。如果您指定要恢复的目录,它还会删除您要从中恢复的提交中不存在的文件。
要将目录
somefolder
的内容恢复到提交 e095
时的状态,您可以运行:
git restore -s e095 somefolder
默认情况下,
git restore
将内容恢复到HEAD
时的状态,但是通过使用-s
开关(--source
的缩写),我们可以将内容恢复到任何提交时的状态。