如何在 GitHub 存储库中编辑初始提交?

5
我正在处理一个我fork的代码库,作者在初始提交中采用了不好的方式并将所有依赖项都塞到了lib/目录下。通常情况下,如果这不是初始提交,我会进行交互式变基并删除整个提交(如果他只做了这些)。然而,我不知道如何编辑/删除最初的提交。有没有办法我可以编辑最初的提交并删除lib目录而不影响其余部分?
编辑:
我无意中在这里找到了答案:Can I remove the initial commit from a Git repo? 中的选定答案。这就是我没有更彻底地搜索所得到的结果。
1个回答

4
$ git filter-branch --parent-filter \
  'test $GIT_COMMIT = SECOND && echo "" || cat' \
  --tag-name-filter cat -- --all

其中SECOND是您想要成为新根的提交的SHA-1。

上述假设所有分支使用相同的第一和第二个提交。如果不是这样,您需要将父筛选器中的测试泛化。

请注意,这是一个极端措施:它将重写您的整个历史记录,并阻止您跟随作者的存储库。此外,如果您已将存储库推送到远程,则需要使用git push -f覆盖它们。


警告:Ref 'refs/heads/master' 未更改 警告:Ref 'refs/remotes/origin/master' 未更改 警告:Ref 'refs/remotes/origin/master' 未更改 这是它给我的信息。 - Rayne
啊!你想重写第二个提交的父级,而不是第一个。请查看更新后的答案,对于错误的开始感到抱歉。 - Greg Bacon
在你编辑这篇帖子之前,我已经找到了一种不同的方法来完成它(我在我的编辑中展示了)。我会假设它真的有效(我完全信任你<3 ),并将你的答案标记为已接受。 - Rayne
1
echo <第二次提交的SHA> 0000000000000000000000000000000000000000 > .git/info/grafts; git filter-branch 不是更简洁吗? - Bombe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接