【发布时间】:2019-06-18 09:37:12
【问题描述】:
我正在考虑这个问题:Revert changes to a file in a commit
我可以先运行git checkout HEAD^ -- <file>,然后运行git add <file> 和git commit 来恢复提交中对文件的更改吗?
谢谢。
【问题讨论】:
标签: git
我正在考虑这个问题:Revert changes to a file in a commit
我可以先运行git checkout HEAD^ -- <file>,然后运行git add <file> 和git commit 来恢复提交中对文件的更改吗?
谢谢。
【问题讨论】:
标签: git
是,但请注意git checkout 首先将文件从<tree-ish> 参数写入到索引,然后将文件的更新索引副本复制到工作树:
git checkout HEAD^ -- <file>
现在<file> 在索引和工作树中是相同的,并且与HEAD^ 找到的提交中的版本匹配。
因此:
然后
git add <file>
是不必要的,因为这只是将工作树版本复制到索引中。1 你可以只做提交。
1工作树版本已经与索引匹配,Git 跳过复制。 即使您修改了一组干净和/或涂抹过滤器,或更改了行尾设置,也是如此。在这种特殊情况下,您希望强制 Git 重新清理文件从工作树到索引的方式,你必须要么欺骗 Git 认为工作树文件已更改:
touch <file>
或使用git add 的--renormalize 选项。
【讨论】:
是的,你可以这样做:
git checkout HEAD -- <path>
git reset <path>
git add <path>
git commit
【讨论】: