我有一个提交,我们将调用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可能是寻找解决方案的地方。
答案 0 :(得分:0)
如何尝试git reflog
这将显示所有历史记录。
或者,如果您只想从历史记录中删除提交
git rebase -i #commitHashBeforeTheOneYouWantToDelete
更具体针对您的解决方案:
git rebase -i ffffff^1
并使用d
标志表示要删除的提交。