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

标签 git github

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

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

我想撤销这些删除,并且不让它们出现在我的提交中。 (注意:我并不是要 stash 删除,所以如果有一种方法可以逆转它们,那也很好。我只是不希望我的 PR merge 到这些文件删除中。)

如果在恢复文件删除后我应该做些什么来更新 Remote ,那也会有帮助。

最佳答案

这与移动 HEAD 无关,而是有选择地取消(在 Git 语言中,“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)

在这里你想要,在恢复所有提交@~3之后,只选择未跟踪的文件(即由git revert再次创建的文件,因为那些创建取消在@~3中删除的内容。
参见“Git add only all new files, not modified files”。

关于git - 如何撤消历史提交中的文件删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41943757/

相关文章:

git - 将问题从 Bitbucket 导入到 Github

Git lfs 跟踪子文件夹下的所有文件

提交后 git push 得到 "Everything up-to-date"

git - 在 Git 中模块化地暂存文件

Git 将现有的 repo 推送到一个新的和不同的远程 repo 服务器?

git - 我可以将 GitHub 的双因素身份验证与 TortoiseGit 一起使用吗?

github - 我可以在没有后端服务器的情况下通过 Chrome 扩展程序的 Github 帐户对用户进行身份验证吗?

git - 区分工作树文件夹的git命令是什么

git - 在 Android Studio 中,从 Git 克隆 flutter 项目时, "run"按钮被禁用/变灰

github - 如何通过 Github API 访问存储库上新创建的文件?