Что делать, если git-am завершается с ошибкой «не совпадает с индексом»? - PullRequest
13 голосов
/ 26 августа 2010

Я пытаюсь применить Git-патч, созданный кем-то другим с git-format-patch. Патч был сделан против одного коммита за HEAD, но, насколько я понимаю, это не должно иметь значения. Когда я запускаю git am 0001.patch, я получаю ошибку:

error: source.c: does not match index

Я не слишком знаком с форматом патчей git, но кажется, что индексы не совпадают, однако источник совпадает.

Какой лучший способ это исправить? Вручную изменить индексы для соответствия? Или я должен git-apply, а затем скопировать информацию об авторе и описании при коммите?

Ответы [ 2 ]

12 голосов
/ 26 августа 2010

От Сам JC Hamano (сопровождающий Git) , это примерно:

исправляет приложения и сливается в грязное рабочее дерево с чистым индексом.

  • A грязное рабочее дерево - это место, где есть изменения, которые не добавлены в индекс.
    Рабочее дерево, которое не является грязным, является чистым рабочим деревом.
  • A грязный индекс - это место, в которое вы уже добавили изменения (другими словами, "git diff --cached" сообщит о некоторых изменениях).
    Чистый индекс соответствует HEAD .

В недавнем выпуске Git вы можете прервать:

Чтобы восстановить исходную ветку и остановить исправление, запустите "git am --abort".

Тогда:

Самым простым для тех, кто не может принять решение, может быть отложить изменения на потом.

$ git stash save "Random changes that are not ready"

И затем повторить«git pull» или «git am».
«git stash» - идеальный инструмент для людей, которые боятся обязательств .

После повторного выполнения "git pull"или" git am ", вы можете воспроизвести локальные изменения, которые вы спрятали:

$ git stash pop

Примечание: одним источником грязного дерева может быть настройка autocrlf (как в этом msysgit, выпуск 81 ), поэтому обязательно задайте для этого параметра значение false .
Другой источник расхождений: core.whitespace настройка .


ОП упоминает в комментарии:

Перед попыткой запустить git am Я запустил git stash, так что я не думаю, что это была проблема.
Что я в итоге сделалвыполнял git am -3 patch.patch, затем исправлял проблему вручную, затем запускал 'git am --resolved'.

Примечание: в последних примечаниях к выпуску Git1.7.2 :

Сообщение от "git am -3" было улучшено после завершения разрешения конфликтасделать патч неактивным.

1 голос
/ 07 ноября 2017

для меня, я на старых версиях git (CentOS-6 дистрибутив).

Я смог решить проблему, выполнив:

  • git update-index --refresh
  • git am ${patch_filename}

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

"

Я немного удивлен, что мы не сделали «обновление сразу» уже и никто никогда не сталкивался с этим в течение последних 5 лет. Кажется, что Я унаследовал это поведение от git-applymbox ;-)

Целесообразно обновлять один раз в начале, а также при перезапуске. с "Я - решен".

"

...