Почему вишневый пик изменяет более одного коммита? - PullRequest
6 голосов
/ 18 октября 2011

У меня есть 2 ветви здесь, скажем, Branch1 и Branch2. В Branch1 добавлено множество новых функций, а Branch2 стабильна. Сегодня я хочу объединить только одну функцию из Branch1 в Branch2. Итак, я просто запускаю git cherry-pick <commit-for-feature1-in-branch1. Я предполагаю, что должно быть только изменение в <commit-for-featur1-in-branch1, которое будет объединено с branch2. Но я обнаружил, что есть другие изменения для других функций.

Я думал, что он получит diff только для указанного коммита, верно?

FYI, фиксация в branch1 была объединена с другой веткой разработки, возможно ли это вызывает эту проблему?

Что-то не так я сделал?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

Что делает git cherry-pick, так это берет указанный вами коммит и считывает разницу между ним и его родителем. Это эффективно делает патч. Затем он применяет этот патч к вашей текущей проверенной ветке.

В вашем случае коммит содержал добавление других функций. Вы можете дважды проверить, соответствует ли сообщение о коммите тому, что, по вашему мнению, было у этой функции, посмотрев патч, который этот коммит сгенерирует с git log:

git log -p -1 <sha1-of-your-commit>

-p сообщает журналу, чтобы он не только отображал информацию о коммите, такую ​​как автор, дату и сообщение о коммите, но также включал патч (или разницу), который вносит коммит. Опция -1 указывает журналу git прекратить запись истории после 1 коммита.

1 голос
/ 25 сентября 2013

Я также сталкивался с этим поведением ... Я проследил его до следующего объяснения, но, возможно, кто-то прояснит это подробнее:

  • Вы выбираете коммит, коммитсодержит 1 изменение в 1 файле
  • Вы заметили, что не только изменения, содержащиеся в коммите, но также и больше изменений (в основном это изменение включено)

Это происходит потому, что изменениефиксация зависит от предыдущего изменения.Таким образом, эта область кода изменялась несколько раз после того, как была создана целевая ветвь, которую вы хотите выбрать вишней.

Git возвращается в историю, пока источник выбора вишни не совпадет с целью и не создаст патч на основе этой ревизии.Вот почему может появиться больше изменений ...

Я считаю, что это поведение немного страшно, потому что можно было бы ожидать, что будут выбраны только изменения из данного хеша коммита

...