我正在考虑以下问题:Revert changes to a file in a commit
我可以先运行git checkout HEAD^ -- <file>
然后运行git add <file>
和git commit
来将更改还原为提交中的文件吗?
谢谢。
答案 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