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

Что делать, если git -am не работает с "не соответствует индексу"?

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

error: source.c: does not match index

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

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

4b9b3361

Ответ 1

От J.C. Хамано (Git сопровождающий), речь идет о:

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

  • 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" было улучшено, когда разрешение конфликтов закончилось тем, что патч был не-op.

Ответ 2

для меня я на более старых версиях git (centOS-6 distro).

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

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

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

"

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

Разумно обновлять один раз в начале, а также при перезапуске с "am - resolved".

"