6

在 git 存储库中,我有一个子目录,我想将其重置为过去的特定状态(较早的提交)。是否可以撤消对特定子目录中文件的所有提交?我认为没有提交会同时将更改应用于此子目录中的文件以及位于其他位置的文件。但是,如果可以在不位于此目录中的不受影响的文件上保留提交,那会很好吗?

我不需要删除历史记录。签出旧状态,删除子目录的当前内容,并在其位置复制并提交旧状态是没有问题的。但最终可能会有一种更优雅(gitonic)的方式。

4

2 回答 2

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>"
于 2012-05-15T08:52:07.887 回答
1

如果您计算出所有要撤消的提交,您可以使用git revert将它们撤消 - 如果只有一两个提交是麻烦制造者,这将是最有用的。

如果有很多提交,或者提交涉及项目的其他部分, CharlesB 的答案是一种更简单的方法(但您实际上可以通过使用 -n(不自动提交)标志来解决这个问题,并且只提交更改你对。。。感兴趣)

于 2012-05-15T11:23:42.150 回答