2015-05-12 6 views
2

Я знаю о git cherry-pick и git применяют теги. Но сегодня я столкнулся с какой-то проблемой. Я применял один патч, используя разницу двух версий. Я использовал следующую команду:В чем разница между применением Cherry-pick и patch?

мерзавца дифф HEAD> diff.patch

мерзавца применять diff.patch

я получил патч применять не удался для одного файла.

Тогда я просто попробовал cherry-pick commit-id2. Вишня выбрана успешно.

В чем причина? Любой хочет бросить некоторый свет на то же самое.

ответ

3

Две возможности:

  • Изменения в diff.patch, вероятно, отличаются от изменений в commit-id2, из-за чего два ведут себя по-разному.

    git diff HEAD показывает разницу между HEAD и текущим рабочим каталогом. git cherry-pick commit-id2 применяет разницу между commit-id2 и ее родителем (и фиксирует результат с использованием метаданных от commit-id2). Разница между commit-id2 и ее родителем (обычно) не совпадает с разницей между HEAD и текущим рабочим каталогом.

  • Вы не указали git apply, чтобы вернуться к 3-стороннему объединению, например cherry-pick. Попробуйте добавить --3way (или -3) к git apply.

Попробуйте следующее:

git diff commit-id2^! >diff.patch 
git apply -3 diff.patch 

выше должен вести себя как git cherry-pick -n commit-id2. (См. git help revisions для объяснения синтаксиса ^!.)

 Смежные вопросы

  • Нет связанных вопросов^_^