git checkout HEAD ^-<file>`可以在提交中还原文件吗?

时间:2019-01-24 15:36:06

标签: git

我正在考虑以下问题:Revert changes to a file in a commit

我可以先运行git checkout HEAD^ -- <file>然后运行git add <file>git commit来将更改还原为提交中的文件吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

是,但是请注意,git checkout首先将<tree-ish>参数写入文件到索引,然后然后复制该文件的更新索引副本。文件到工作树:

git checkout HEAD^ -- <file>

现在<file>在索引和工作树中是相同的,并且与HEAD^找到的提交中的版本匹配。

因此:

  

然后是git add <file>

是不必要的,因为这只是将工作树版本复制到索引中。 1 您可以执行提交。


1 工作树版本已经与索引匹配,并且Git跳过复制。即使您已经修改了一组干净和/或污迹过滤器,或者更改了行尾设置,这也是正确的。在这种情况下,您想强制Git重新清理文件。从工作树到索引的方式,您必须欺骗Git认为工作树文件已更改:

touch <file>

或使用--renormalize的{​​{1}}选项。

答案 1 :(得分:-1)

是的,您可以执行以下操作:

git checkout HEAD -- <path>
git reset <path>
git add <path>
git commit