由于提交损坏,Git无法获取

时间:2014-10-26 10:02:55

标签: git commit fetch

我们其中一个人推动了一个似乎完整并在他的计算机上工作的提交。从那时起,其他任何计算机都无法从远程存储库中获取更改。 每个人都得到的错误是:

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不会将提交显示为悬空,并且在远程服务器中,没有分支指向提交。

从提交中恢复数据不是优先事项,但让系统重新运行是。

有关如何删除/修复损坏的提交的任何建议?非常感谢帮助。

谢谢!

1 个答案:

答案 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   推向主分支)。请参阅上面的...部分   的信息。