【问题标题】:How to undo file deletions from a historical commit?如何从历史提交中撤消文件删除?
【发布时间】:2017-06-16 01:46:09
【问题描述】:

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

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

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

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

【问题讨论】:

  • 就发git revert offending_commit_id?

标签: git github


【解决方案1】:

这与移动 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)

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

【讨论】:

  • 如果那些被删除的文件以前未被跟踪但被git add . 添加到舞台上,会有什么变化吗?我很想回去把它们从上演中删除,因为它们不应该被追踪。
  • @zahabba 这是不同的:为了确保它们从未被跟踪(意味着它们不在任何回购历史的提交中),你需要一个 git filter-branch (help.github.com/articles/…),它会重写说历史。 git revert 的侵入性较小,创建一个新的提交,而不是 git filter-branch,更改过去的提交。
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 2011-08-20
  • 2016-12-16
  • 2017-04-11
  • 2015-09-02
  • 2021-06-25
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多