恢复在存储库中重新创建许多文件的提交

时间:2016-07-14 19:31:04

标签: git intellij-idea

我有一个提交,我们将调用ffffffff,其中几乎我的存储库中的所有文件都被“重新创建”后(我们相信)提交用户试图清除他的git缓存。 git diff-tree -r --root fffffff的输出样本如下:

:000000 100644 0000000000000000000000000000000000000000 046c26d49dce17a235c5d3a6ae68b5ca3d92b1d7 A  .gitignore
:000000 100644 0000000000000000000000000000000000000000 c3326e41785be00452c0351076bfa066f82aadc4 A  README.md
:000000 100644 0000000000000000000000000000000000000000 603785805443e956172463b45738c953323407c0 A  api/.checkstyle
:000000 100644 0000000000000000000000000000000000000000 81120da5367551fad21c489022f63bcbf0b5c344 A  api/.gitignore
:000000 100644 0000000000000000000000000000000000000000 350b725cb2df7907af4591826aa3ca2c0d0b9b10 A  api/Dockerfile-deploy
:000000 100644 0000000000000000000000000000000000000000 1e9376a5932abdc47c6cc233db0c8c9c50cecb46 A  api/Dockerfile-dev
:000000 100644 0000000000000000000000000000000000000000 d34d14b7e5984b56645a96e8ad394307f61a1299 A  api/build.gradle

......等等,超过3000个文件。

此提交的最大症状是它混淆了IntelliJ,它似乎不遵循此前的文件历史记录,而是在文件的历史记录中只显示一个提交:fffffff。我仍然可以使用类似git log --follow -p <FILENAME>的内容查看文件的历史记录,但这不太可取。毕竟IDE应该是集成的,不是吗? ;)

所以我的问题是这个。假设围绕它的所有其他提交都很好,删除此提交的理想方法是什么?一个简单的git revert fffffff会将所有这些文件显示为已删除,因此这不起作用。我被告知rebase可能是寻找解决方案的地方。

1 个答案:

答案 0 :(得分:0)

如何尝试git reflog这将显示所有历史记录。

或者,如果您只想从历史记录中删除提交

git rebase -i #commitHashBeforeTheOneYouWantToDelete  

更具体针对您的解决方案:

git rebase -i ffffff^1

并使用d标志表示要删除的提交。