Чем отличаются git cherry-pick и git show |патч -p1? - PullRequest
12 голосов
/ 01 марта 2011

Я столкнулся с ситуацией, когда git cherry-pick X может иметь некоторые конфликты, но также создал дополнительные вставки (при проверке с помощью git diff).

Затем я перезапустил git show X > my.patch, а затем сделал patch -p1 < my.patch на своем дереве. Я получил лучшие результаты, некоторые конфликты, но гораздо более чистый результат.

Что делает Git особенным с вишневыми кирками? Я использую git 1.7.0.4.

Отредактировано: Под более чистыми результатами я имею в виду, что результирующее дерево намного больше соответствовало результатам git show X, тогда как git cherry-pick содержало гораздо больше кода.

Ответы [ 2 ]

8 голосов
/ 01 марта 2011

Когда вы выбираете коммит, он фиксирует результат с использованием всех метаданных коммита, а не только различий, которые он представляет - вы получите исходное сообщение о коммите и автора. Ваш патч-конвейер получит вам требуемое содержимое рабочего дерева, но затем вам нужно будет зафиксировать его самостоятельно, надеюсь, с помощью git commit -c <original-commit>, чтобы скопировать метаданные, как это сделал бы cherry-pick. Cherry-pick также имеет несколько дополнительных опций, которые могут быть полезны, и может принимать несколько коммитов (возможно, указанных в качестве диапазона списка оборотов). patch явно не поддерживает ничего из этого.

Я не уверен в вашем утверждении, что результат был "чище". Вы предлагаете, чтобы git применил diff иначе, чем patch?

1 голос
/ 28 октября 2013

Это может помочь:

http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html

Это может быть частично не по теме, но, как вы можете видеть, выборка вишни, похоже, каким-то образом отслеживает блоки кода в коде, оченьболее продвинутый, чем, как я предполагаю, делает patch, который, вероятно, просто анализирует две кодовые базы последовательно и рядом друг с другом и отмечает строки, которые отличаются.

...