我一直试图在我的回购开始时删除2个额外的提交 - 但是当我认为我成功时,我在github上推送一个空的回购,网络图表显示没有变化。
它是如何发生的:我的朋友推出了一个初始提交 - 一个10兆的库。我告诉他我们会重新开始,所以我没有拉,我做了一个新的初始提交和强制推动。我告诉他删除他的git文件夹,但他只删除了文件夹中的所有文件,不包括.git文件夹。当他拉,他做了合并提交,我暂时没有注意到。
现在我们的git历史的开头是这样的:
蓝色位是我的第二个初始提交。当他合并时,他只是用我的提交覆盖了所有内容。在这一点上,我已经尝试回到我在新分支中的初始提交并重新定位并确保我不“选择”他的初始提交,但是当我推送到空仓库时,他的额外初始提交再次出现。我还尝试回到标记为2的初始提交,并从标记为4的一个提交(从跳过其他初始提交1并合并提交3)开始每次提交。这两个都没有起作用,因为在rebase完成后,1和3仍然被推送到空回购。有没有办法删除1和3?由于3简单地抛弃了所有1,我认为它应该能够。
我使用的rebase命令是
git checkout -b tmpfix
git rebase --root -i
和
git branch -b tmpfix <sha1>
git cherry-pick <sha1>
答案 0 :(得分:0)
我找到了自己的解决方案。繁琐,但值得回购的98%减少。我会尝试尽可能清楚地说明这一点--AFAIK这只适用于从初始提交中重写整个git历史记录。
mkdir ~/newRepo
,cd ~/newRepo
,git init
)git remote add original git@github.com:...
)git fetch original
)git cherry-pick xxxxxxx
用于单个提交,或git cherry-pick xxxxxxx^..xxxxxxx
用于范围,包括在内)git checkout xxxxxxx
git checkout -b branch-name
)来保存一个新的分支。确保与您所在的分支完全匹配。完成主分支和所有连接分支后,强制推送应重写历史记录。
我还没有找到一种方法来保存分支和合并的历史记录 - 它最终成为我的一条连续线,但是任何未合并的分支仍然会显示出来。