如何撤消历史提交中的文件删除?

时间:2017-01-30 19:17:06

标签: git github

在一个repo中,我有一个提交(HEAD后面约3个),它有大量的文件删除,这些文件删除被意外暂存并包含在提交中。根据文件类型,它们在执行git log --stat时显示为以下任一项:

path/to/some/file                     | Bin 22522 -> 0 bytes
path/to/another/kind/of/file          | 1 -

我想撤消这些删除操作,并且不会在我的提交中出现任何删除。 (注意:我没有试图隐藏删除,所以如果有一种方法可以反转它们,那也没关系。我只是不想让我的PR合并到这些文件删除中。)< / p>

如果在撤消文件删除后我应该做些什么来更新遥控器,这也会有所帮助。

1 个答案:

答案 0 :(得分:3)

这与移动HEAD无关,而是有选择地取消(在Git linguo中,“reverting”)来自提交的一些文件。

在您的情况下,@~3提交包含您不想要的删除,但其他文件(您可能不想还原)。

git revert --no-commit @~3 # Revert, don't commit it yet
git reset                  # Unstage everything

# add only the files you need (ie the one created, not the ones modified)
git add $(git ls-files -o --exclude-standard)

在恢复 all 提交@~3后,您希望仅选择未跟踪的文件(即git revert再次创建的文件,因为这些创建取消了已删除的内容在@~3) 请参阅“Git add only all new files, not modified files”。