在git存储库中,我有一个子目录,我想要重置为过去的特定状态(早期的提交)。是否可以撤消特定子目录中文件的所有提交?我认为没有提交将更改应用于此子目录中的文件以及同时位于其他位置的文件。但是,如果可以在不受影响的文件中保留对此目录中不的提交,那将会很好吗?
我不需要删除历史记录。检查旧状态,删除子目录的当前内容,并在其位置复制并提交旧状态将没有问题。但最终可能会有更优雅( gitonic )的方式。
答案 0 :(得分:10)
使用git checkout
能力应用于子目录的最简单方法。然后分阶段并提交:
git checkout <old-SHA1> -- path/to/subdir
git add -A path/to/subdir
git commit -m "reverted files in path/to/subdir to what it was at <old-SHA1>"
答案 1 :(得分:1)
如果你计算了要撤消的所有提交,你可以使用git revert来支持它们 - 如果只有一两个提交是麻烦制造者,这将是最有用的。
如果有很多提交,或者提交触及项目的其他部分,那么CharlesB's answer是一种更简单的方法(但实际上你可以通过使用-n(不自动提交)标志来解决这个问题) ,并且只提交您感兴趣的更改)