如何将文件夹恢复到特定提交

问题描述 投票:0回答:3

这是我的文件夹“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 revert
3个回答
206
投票

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

git checkout e095 -- somefolder

至于你关于生成差异的问题,那也可以。 只需生成差异即可从当前状态返回到

e095
:

git diff 89cd..e095 -- somefolder

86
投票

您可以使用

git reset
重置索引,这还包括删除在最近提交中添加的文件(
git checkout
本身不执行此操作):

git reset e095 -- somefolder

但是

git reset
不会更新工作副本,并且
--hard
选项不适用于文件夹。所以然后使用
git checkout
使工作副本与索引相同:

git checkout -- somefolder

然后,如果您还想删除添加的任何文件,您还需要执行以下操作:

git clean -fd somefolder

2
投票

git restore
命令是将文件和目录恢复到不同提交时的状态的命令。如果您指定要恢复的目录,它还会删除您要从中恢复的提交中不存在的文件。

要将目录

somefolder
的内容恢复到提交
e095
时的状态,您可以运行:

git restore -s e095 somefolder

默认情况下,

git restore
将内容恢复到
HEAD
时的状态,但是通过使用
-s
开关(
--source
的缩写),我们可以将内容恢复到任何提交时的状态。

© www.soinside.com 2019 - 2024. All rights reserved.