致命的:坏对象xxx

Jam*_*son 36 git

我尝试恢复到以前的git提交:

git revert xxx
Run Code Online (Sandbox Code Playgroud)

我现在收到此错误作为回复:

fatal: bad object xxx
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我该如何解决?

Pra*_*rti 22

我不知道发生这种情况的确切原因.对我来说,这是因为我忘记将整个存储库拉到我的本地.我有2个或更多路径,每个路径从不同的分支拉

/path/branch_a/ -> pulled from branch A
/path/branch_b/ -> pulled from branch B
Run Code Online (Sandbox Code Playgroud)

在分支A上,我做了一些修改,并照常提交.我希望该提交(例如提交ID是abcdef123)出现在分支B上,所以我使用

$ cd /path/branch_b/
$ git branch
  master
  branch_a
* branch_b 

$ git cherry-pick abcdef123
Run Code Online (Sandbox Code Playgroud)

这给了我那种错误.所以我需要在获得提交之前拉出整个存储库

$ git pull
remote: Counting objects: 257, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 216 (delta 187), reused 186 (delta 158)
Receiving objects: 100% (216/216), 53.13 KiB | 43 KiB/s, done.
Resolving deltas: 100% (187/187), completed with 38 local objects.
From github.com:username/my_repo
   abcdef3..80c0d68  branch_a    -> origin/branch_a
Already up-to-date.

$ git cherry-pick abcdef123 
[branch_b ccddeef] Some commit message
1 file changed, 1 insertion(+), 1 deletion(-)
Run Code Online (Sandbox Code Playgroud)

  • 这个答案揭示了在具有不同分支的不同文件夹中使用相同repo的常见错误.给我一个+1. (4认同)

Prz*_*eoR 13

在我的情况下,我从另一个我没有拉的分支中挑选,但是我试图从GH复制提交的ID(我没有在我当地的樱桃采摘中得到这个).

希望它有所帮助;-D

  • 出于同样的原因,我遇到了这种情况,但也增加了问题的是,我试图挑选的提交在合并到主分支时被压缩,因此,原始提交的 SHA1 已更改。一旦我弄清楚代表我所追求的相同更改的新 SHA1 是什么,我就能够很好地挑选新的 SHA1。 (2认同)

tor*_*rek 11

[ 编辑,2016年11月19日 ]虽然这通常表明存储库损坏,但是当某些命令 - 通常是另一个任务中的另一个Git - 正在打开并锁定内部文件时,它会发生在Windows上.在这种情况下,终止其他任务应该修复它.原始答案如下.


bad object一些十六进制数字往往意味着标签中包含无效的引用号,但也可能出现在其他一些奇怪的情况下.例如,如果我这样做:

$ git tag foo
$ vi .git/refs/tags/foo
Run Code Online (Sandbox Code Playgroud)

并更改最后一个字符(在本例中为6到5)并写出:

$ git log foo
fatal: bad object foo
Run Code Online (Sandbox Code Playgroud)

这究竟是什么xxx,它来自哪里?

  • 就我而言,我需要运行“git fetch”才能在本地进行远程提交。 (3认同)
  • 嗯,如果它是“ git log”输出中的干净粘贴,那就太奇怪了!您可以“ git显示”相同的ID,没有任何错误吗? (2认同)

jor*_*fus 9

我尝试从我的客户端不知道的分支合并时遇到了同样的错误(坏对象[hash]).(类似于PrzeoR的情况,但不需要拉取我需要取的)

在我的情况下,我需要运行git fetch以将我的客户端重新同步到服务器的状态.如果有人以与我相同的方式到达此主题并且可以从此洞察中受益,则发布此处.

git pull
git cherry-pick [hash]
fatal: bad object [hash]
git fetch
remote: Counting objects: 8, done. (etc.)
From github.com:repo/branch
 * [new branch] branchname

git cherry-pick [hash]
[success]
Run Code Online (Sandbox Code Playgroud)

  • git fetch,记住这一点 (4认同)

Sha*_*ian 7

git fetch --all

git fetch 命令将提交、文件和引用从远程存储库下载到本地存储库。

  • 哎呀 - 没有解决问题。 (2认同)

ms6*_*609 6

当本地存储有过时或损坏的分支时,可能会出现此问题。

删除文件.git/refs/remotes/origin/xxx(备份后!)然后从服务器获取新副本对我有用。

更多详细信息请参见GitHub


sms*_*ash 6

我不确定我是如何得到这个错误的,这就是我得到的错误。

fatal: bad object refs/remotes/origin/{branchname}
fatal: failed to run repack
Run Code Online (Sandbox Code Playgroud)

尝试通过 修剪 git 存储库git gc --aggressive --prune=now。这没有帮助。

这个分支已经过时了,对我来说并不重要,所以我删除了分支文件夹

rm -rf .git/refs/remotes/origin/{branchname}

git gc

它成功进行了对象枚举和清理。


unk*_*ror 5

或者

git 获取来源

原因:如果您尝试挑选的提​​交 ID 在您的本地 git 中不可用,则可能会出现此错误。

做一个git pull会解决这个问题。如果这还没有修复,请共享提交 ID 的人将更改推送到origin并执行git pull