所以我犯了个错误。我不得不意外地从git历史记录中删除了一个大二进制文件,并且我使用了git filter-branch --tree-filter命令来做到这一点。当这里有很多线程处于这样的状态时,如果其他人在执行过滤分支时提交到分支,那么它就是一个f.up,我错误地拉动了这些更改,合并了它们,然后推送到远程,而不是在不合并的情况下执行强制推进。这个错误导致我的整个存储库重复提交。
有没有办法摆脱那些被欺骗的犯罪。我们有超过10K提交,而那些被欺骗了,所以用手压他们,或做任何事情用手不是一个选择。
我在.git/refs/original/refs中也没有任何东西,我甚至没有这个文件夹。
我还能恢复这个回购吗,还是我们需要重新开始?
反映@ElpieKay的更新
我在commit上创建了git reset --hard,这是错误合并之前的提交。这解决了一些问题,但在我们正在进行的拉请求中,由于新引入的重复提交而引发了许多冲突。
因此,我创建了git push origin -f ad67a5z2z8:development,之后头部指向ad67a5z2z8提交,这是我发出filter分支命令之前的最后一次提交。之后,拉请求中的冲突就消失了,但是重复的提交仍然存在。无论如何我都不能移除。
发布于 2019-06-04 07:39:05
假设分支是master。运行git reflog master。在输出中,您应该能够从顶部找到一行,它指示master在git pull之后的位置,在此模式中
b3c23d5 master@{n}: pull foo master: Merge made by the 'recursive' strategy.然后紧跟在后面的另一行,它指示master在git filter-branch之后的位置,在这个模式中
569a613 master@{n}: filter-branch: rewrite上面一条线下面的一行表示哪个提交master在git filter-branch之前。可能就像
123abcd master@{n}: foo bar baz在存储库中,哈希应该是不同的。在这个例子中,569a613就是您应该强制执行的提交。您需要执行两个步骤来修复这个问题:
1)强制推送569a613更新远程存储库中的master,
git push origin -f 569a613:master2)找出其他人推动的额外提交,并将这些提交应用于新的master,
git log --oneline 123abcd..b3c23d5^2第二步中列出的提交可能不准确。与其他投稿人核实。
https://stackoverflow.com/questions/56438426
复制相似问题