Подтвердить что ты не робот

Смертельный: плохой объект xxx

Я попытался вернуться к предыдущему объявлению git с помощью:

git revert xxx

Теперь я получаю эту ошибку как ответ:

fatal: bad object xxx

Что я делаю неправильно? Как это исправить?

4b9b3361

Ответ 1

[ Изменить, 19 ноября 2016 г.]. Хотя это, как правило, указывает на повреждение репозитория, оно появляется в Windows, когда какая-то команда - обычно, другая Git в другой задаче - содержит внутренние файлы открыть и заблокировать. В этом случае завершение другой задачи должно быть исправлено. Оригинальный ответ ниже.


bad object с некоторым шестнадцатеричным числом имеет тенденцию означать, что у тега есть недопустимый ссылочный номер в нем, но может также произойти для нескольких других странных случаев. Например, если я делаю:

$ git tag foo
$ vi .git/refs/tags/foo

и измените последний символ (в данном случае от 6 до 5) и напишите это:

$ git log foo
fatal: bad object foo

Что такое xxx здесь и откуда оно взялось?

Ответ 2

Я не знаю, почему именно так происходит. Для меня это потому, что я забыл вытащить весь репозиторий на свой локальный. У меня есть 2 или более пути, и каждый путь тянется от разных ветвей

/path/branch_a/ -> pulled from branch A
/path/branch_b/ -> pulled from branch B

на ветке A, я сделал несколько изменений и совершил как обычно. Я хочу, чтобы в ветке B появилось сообщение commit (например, идентификатор фиксации abcdef123), поэтому я использую

$ 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(-)

Ответ 3

В моем случае я выбрал вишню из другой ветки, которую я не потянул, но я попытался скопировать идентификаторы фиксации из GH (у меня этого не было на моем месте, где я был вишневым).

Надеюсь, что это поможет; -D

Ответ 4

Я просто столкнулся с той же ошибкой (плохой объект [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]

Ответ 5

Объекты, которые не существуют в репозитории, дают сообщение об ошибке

например:.

 git init
 touch a
 git add a
 git commit -m 0
 # This object is not in the repository.
 git show 1111111111111111111111111111111111111111

Что касается проблемы, трудно сказать без минимального воспроизводимого примера.

Проблемы с субмодулями однажды дали мне эту ошибку.

Ответ 6

Я столкнулся с той же ошибкой при попытке выбрать (на A) коммит другой ветки (B). Проблема была глупой, просто забыл нажать git push (B).

Ответ 7

вам нужно выполнить git fetch, чтобы синхронизировать последние коммиты с локальными

git fetch

тогда сделай

мерзавец вернуться

Ответ 8

Причина, по которой я столкнулся с этим, была проста. Я переключался между основным хранилищем и подмодулем. Я попытался сделать различие между одним хешем (в основном репозитории) и другим, который я скопировал из SourceTree, думая, что было легко получить старый HEAD (я регрессировал одну ревизию, чтобы отследить регрессию). Старый хэд HEAD, который я собрал, был хемом субмодуля, и git diff был выпущен вместе со мной за то, что он выложил ему мусор. Вот как я оказался здесь, и когда понял, что это ошибка оператора. Если ваш хеш из другого хранилища, git будет ругать вас этим сообщением. Однако, если вы покормите его мусором, не лучше ли сообщить "ХХХ - не ревизия в этом хранилище"? Как правило, это сообщение об ошибке "плохой объект", и вероятность того, что кто-то отправит в стек переполнение для получения ответов, намного ниже. Интересно, примут ли ребята из сообщества git этот запрос на извлечение...

Ответ 9

Я получил эту ошибку при попытке выбрать коммит, чей хэш я скопировал из GitHub. Этот коммит был на ветке, которую я не потянул, как и PrzeoR.

В отличие от PrzeoR a git fetch сначала не помог, потому что ветка была удалена на GitHub. К счастью, мне удалось найти соответствующий (закрытый) Pull Request и восстановить ветку на GitHub.

Ответ 10

  мерзавец

ИЛИ

git fetch origin

Причина: если идентификатор коммита, который вы пытаетесь выбрать вишней, недоступен в вашем локальном git, возможно, существует эта ошибка.

Выполнение git pull исправит это. Если это не было исправлено, попросите человека, который поделился идентификатором фиксации, перенести изменение в origin и выполнить git pull