以前のgitcommitに戻してみました:
git revert xxx
私は今、応答としてこのエラーを受け取っています:
fatal: bad object xxx
私は何が間違っているのですか?これを修正するにはどうすればよいですか?
以前のgitcommitに戻してみました:
git revert xxx
私は今、応答としてこのエラーを受け取っています:
fatal: bad object xxx
私は何が間違っているのですか?これを修正するにはどうすればよいですか?
それが起こる正確な理由はわかりません。私にとっては、リポジトリ全体をローカルにプルするのを忘れているためです。2つ以上のパスがあり、各パスは異なるブランチからプルします
/path/branch_a/ -> pulled from branch A
/path/branch_b/ -> pulled from branch B
ブランチAで、いくつかの変更を加え、通常どおりコミットします。コミット(たとえば、コミットIDはabcdef123
)がブランチBに表示されるようにしたいので、
$ cd /path/branch_b/
$ git branch
master
branch_a
* branch_b
$ git cherry-pick abcdef123
これは私にその種のエラーを与えます。したがって、コミットを取得する前にリポジトリ全体をプルする必要があります
$ 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(-)
[編集1、2016年11月19日]これはリポジトリの破損を示す場合がありますが、Windowsで、あるコマンド(通常は別のタスクの別のGit)が内部ファイルを開いてロックしているときに発生することがわかります。この場合、他のタスクを終了すると修正されます。元の答えは以下の通りです。
[編集2、2020年5月6日]上記が(生のハッシュID)xxx
などに似ているとします。b34789c0b0d3b137f0bb516b417bd8d75e0cb305
これをカットアンドペーストから取得した場合は、このリポジトリ用であることを確認してください(特に、複数のウィンドウを開いている場合は、気付かないうちに他のリポジトリからハッシュIDを取得するのは簡単です)。自分で再入力した場合は、タイプミスがないことを確認してください。これにサブモジュールが含まれる場合は、サブモジュールが最新であることを確認してください。質問へのコメントと、これを含むいくつかの回答を参照してください。
bad object
16進数の場合は、タグに無効な参照番号が含まれていることを意味する傾向がありますが、他のいくつかの奇妙な場合にも発生する可能性があります。たとえば、私が行う場合:
$ git tag foo
$ vi .git/refs/tags/foo
最後の文字(この場合は6から5)を変更して、次のように書き出します。
$ git log foo
fatal: bad object foo
ここは正確には何xxx
で、どこから来たのですか?
私の場合、プルしていない別のブランチからチェリーピッキングを行っていましたが、コミットのIDをGHからコピーしようとしました(チェリーピッキングを行っていたローカルではこれを取得していません)。
お役に立てば幸いです;-D
クライアントが知らないブランチからマージしようとしたときに、同じエラー(不正なオブジェクト[ハッシュ])が発生しました。(PrzeoRの場合と似ていますが、プルする代わりにフェッチする必要がありました)
私の場合、クライアントをサーバーの状態に再同期するためにgitfetchを実行する必要がありました。誰かが私と同じ方法でこのスレッドに到達し、この洞察から利益を得ることができる場合に備えて、これをここに投稿してください。
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]
git fetch --all
git fetchコマンドは、コミット、ファイル、および参照をリモートリポジトリからローカルリポジトリにダウンロードします。
git pull
また
git fetch origin
理由:チェリーピックしようとしているコミットIDがローカルgitで利用できない場合は、このエラーの可能性があります。
を実行すると、git pull
これが修正されます。これが修正されていない場合は、コミットIDを共有している人に変更をプッシュしorigin
て、git pull
リポジトリに存在しないオブジェクトは、そのエラーメッセージを表示します
例えば:
git init
touch a
git add a
git commit -m 0
# This object is not in the repository.
git show 1111111111111111111111111111111111111111
問題の原因については、再現可能な最小限の例がなければ言うのは難しいです。
サブモジュールの問題により、そのエラーが一度発生しました。
ローカルと同期して最新のコミットを取得するには、gitfetchを実行する必要があります
git fetch
その後、
git revert
GitHubからハッシュをコピーしたコミットをチェリーピックしようとしたときにこのエラーが発生しました。このコミットは、PrzeoRのように、私が引っ張っていなかったブランチで行われました。
PrzeoRとは異なりgit fetch
、GitHubでブランチが削除されていたため、最初は役に立ちませんでした。幸い、対応する(閉じた)プルリクエストを見つけて、GitHubでブランチを復元することができました。
この問題は、ローカルに保存されている古いブランチまたは破損したブランチがある場合に発生する可能性があります。
(バックアップを作成した後!)ファイルを削除して.git/refs/remotes/origin/xxx
から、サーバーから新しいコピーを取得すると、うまくいきました。
詳細については、GitHubをご覧ください。
このエラーがどのように発生したかわかりません。これが発生したエラーです。
fatal: bad object refs/remotes/origin/{branchname}
fatal: failed to run repack
を介してgitリポジトリをプルーニングしようとしgit gc --aggressive --prune=now
ました。それは役に立たなかった。
このブランチは古く、私にとっては重要ではなかったので、ブランチフォルダを削除しました
rm -rf .git/refs/remotes/origin/{branchname}
走ったgit gc
オブジェクトの列挙を実行し、正常にクリーンアップしました。
別のブランチ(B)のコミットを(Aで)チェリーピックしようとしたときに同じエラーが発生しました。問題はばかげていました。コミットをgitpushするのを忘れただけです(B)。
私がそれに遭遇した理由は単純でした。メインリポジトリとサブモジュールを切り替えていました。古いHEADを取得するのは簡単だと思って(メインリポジトリにある)1つのハッシュとSourceTreeからコピーした別のハッシュを比較しようとしました(リグレッションを追跡するために1つのリビジョンをリグレッションしました)。私が取得した古いHEADハッシュは、サブモジュールのハッシュであり、git diff
ゴミを出すために私と一緒に出されました。それが私がここにたどり着いた方法であり、それがオペレーターのエラーであることに気付いたときです。ハッシュが別のリポジトリからのものである場合、gitはこのメッセージであなたを叱ります。ただし、ガベージをフィードする場合は、「XXXはこのリポジトリのリビジョンではありません」と報告する方がよいでしょうか。これは、「不良オブジェクト」と同じくらい一般的なエラーメッセージであり、回答を得るために誰かをスタックオーバーフローに送る可能性はかなり低くなります。gitコミュニティの人々はそのプルリクエストを受け入れるのだろうか...