我试图使用Git Gui执行git提交。我上演了几个文件,然后由于电量不足,我的电脑突然关闭了。我将其插入,重新打开,并提交了我想要的文件。然后我跑了git push
,就像我之前做了一百万次没有任何问题,这次我得到了以下错误:
Counting objects: 8, done.
error: object file .git/objects/b5/60c934f6bad40f4f246973afc0139ed91a2d32 is empty
Compressing objects: 100% (4/4), done.
error: object file .git/objects/b5/60c934f6bad40f4f246973afc0139ed91a2d32 is empty
fatal: loose object b560c934f6bad40f4f246973afc0139ed91a2d32 (stored in .git/objects/b5/60c934f6bad40f4f246973afc0139ed91a2d32) is corrupt
error: failed to push some refs to 'git@bitbucket.org:joemorano/app.git'
这可能是由于计算机在我执行第一次提交之前关闭了吗?
在所有这一切发生之前,我显然通过在我的服务器上以root身份运行bundle install
来破坏我的应用程序的生产版本,现在服务器上的所有内容都搞砸了,但我不知道怎么可能影响本地版本。我从未做过git pull
或类似的事情。
之前有人遇到此错误吗?
答案 0 :(得分:6)
... failed to push some refs to 'git@bitbucket.org:joemorano/app.git'
这可能是由于计算机在我执行第一次提交之前关闭了吗?
当然,是的。
之前有人遇到此错误吗?
Repair corrupted git repository
另请参阅:How to fix corrupted git repository?
在这种情况下,由于您(可能)在bitbucket上有一个非损坏的备份,我首先将其克隆到一个新的(好的)克隆,然后看看我是否可以从中恢复任何中间提交和文件现有(坏)克隆和/或其工作树,将它们放入新的(好的)克隆中。一旦恢复了从坏克隆中恢复的任何内容,就可以放弃或删除它。 (根据您的计算机及其文件系统检查和修复工具,您可能也希望在执行任何其他操作之前运行它们。)
答案 1 :(得分:6)
第1步:备份.git(实际上我是在每个更改内容的步骤之间执行此操作,但使用新的副本名称,例如.git-old-1,.git-old -2等等):
cp -a .git .git-old
第2步:运行
git fsck --full
您将收到此错误消息
例如: 错误:目标文件.git / objects / 0A / dsdadadadaaeer4r3434343434334f为空
步骤3:删除上面的.git/objects/
文件夹中的空文件。继续删除空文件。
步骤4:删除所有空文件后,现在运行
git fsck --full
第5步:尝试git reflog。失败,因为HEAD坏了。
第6步:手动获取reflog:
git log origin/master..HEAD
步骤7:请注意,从第6步开始,我们了解到HEAD当前指向最后一次提交。因此,让我们试着看看父提交:
git show commit-id
步骤8:现在我们需要将HEAD指向commit-id
git update-ref HEAD commit-id
希望这对你有用。
答案 2 :(得分:1)
这是由于驻留在本地 .git 文件夹中的 head对象文件损坏了。
在启用以下命令后,可以查看以前的引用并追溯提交。
git symbolic-ref HEAD refs/remotes/origin/master // resetting to branch refs inside .git folder manually
git status // now we can use git log to find the latest commit. which will be clean to master.
git reflog // to track back lost commit.
git reset HEAD@{5} // resetting hard to refs with the changes.
发现有时 diff更改存在,方法是通过 commit 进行重置,而中不存在更改 。
因此,我们使用提交ID进行了软重置,并使用difftool手动设置了丢失的更改。
答案 3 :(得分:0)
**
**
我遇到了类似的问题。
> $ git push error: object file
> .git/objects/65/05c1876d9c4f89b9f65949052af3495ae039cd is empty error:
> object file .git/objects/65/05c1876d9c4f89b9f65949052af3495ae039cd is
> empty error: object file
> .git/objects/65/05c1876d9c4f89b9f65949052af3495ae039cd is empty fatal:
> loose object 6505c1876d9c4f89b9f65949052af3495ae039cd (stored in
> .git/objects/65/05c1876d9c4f89b9f65949052af3495ae039cd) is corrupt
> error: remote unpack failed: eof before pack header was fully read
然后我刚刚删除了空对象文件
$ rm .git/objects/65/05c1876d9c4f89b9f65949052af3495ae039cd
我现在可以进行git push了。
$ git push
Enumerating objects: 41, done.
Counting objects: 100% (41/41), done.
Delta compression using up to 4 threads
Compressing objects: 100% (21/21), done.
Writing objects: 100% (22/22), 3.82 KiB | 1.91 MiB/s, done.
Total 22 (delta 15), reused 0 (delta 0)
remote:
remote: View pull request for feature/*BranchName*
> error: failed to push some refs to 'ssh://git@stash.xxx.com
我尝试过$git gc
,尽管这使我删除了一些文件-请勿这样做