我们其中一个人推动了一个似乎完整并在他的计算机上工作的提交。从那时起,其他任何计算机都无法从远程存储库中获取更改。 每个人都得到的错误是:
git.exe fetch -v --progress "origin"
POST git-upload-pack (gzip 1407 to 775 bytes)
remote: error: Could not read a75720ce47ae8dcc1d0b4c09fcb7d6f70efa390b
remote: fatal: revision walk setup failed
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
git did not exit cleanly (exit code 128) (14368 ms @ 26/10/2014 11:49:05)
无法读取的SHA(a75720 ...)是所述提交的SHA。
我们尝试了各种各样的东西,但似乎没有任何效果。运行git fsck不会将提交显示为悬空,并且在远程服务器中,没有分支指向提交。
从提交中恢复数据不是优先事项,但让系统重新运行是。
有关如何删除/修复损坏的提交的任何建议?非常感谢帮助。
谢谢!
答案 0 :(得分:1)
在本地计算机中,您可以在a75720之前将主服务器重新绑定到提交。
Rollback to an old Git commit in a public repo
然后你可以为其他人提交一份樱桃选择。 (你可以提交一份提交列表)
How to cherry-pick multiple commits
然后,如果一切似乎都在起作用,你必须强行推动。
git push --force origin desiredBranch
(指定所需的分支!!)
来自:http://git-scm.com/docs/git-push
- force通常,该命令拒绝更新远程ref,该远程ref不是用于覆盖它的本地ref的祖先。还有,何时 使用--force-with-lease选项,该命令拒绝更新当前值与预期值不匹配的远程ref。
此标志禁用这些检查,并可能导致远程存储库 失去承诺;小心使用它。
请注意, - force适用于所有推送的引用,因此使用 将push.default设置为匹配或多次推送 配置了远程。* .push的目的地可能会覆盖其他的refs 比当前分支(包括严格落后的本地裁判) 他们的远程对手)。要强制推送到一个分支,请使用+ 在refspec前面推(例如git push origin + master to force 推向主分支)。请参阅上面的...部分 的信息。