Почему git log --cherry-pick не удаляет эквивалентные коммиты?
Я пытался использовать
git log --no-merges --cherry-pick --right-only master...my-branch
для создания списка коммитов, которые находятся в my-branch, но не в master (согласно документации git-log). Тем не менее, есть еще много эквивалентных коммитов, которые появляются в списке. Если я покажу их и их патчи, нет никакой разницы, кроме идентификатора фиксации.
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 >patcha
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 >patchb
diff patcha patchb
1c1
< commit 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
---
> commit c53c7c32dcd84bfa7096a50b27738458e84536d5
и даже git patch-id
показывает их как эквивалентные:
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b c53c7c32dcd84bfa7096a50b27738458e84536d5
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
как git log --cherry-pick
не забрать их как дубликаты?
2 ответов
вы объединили master в свою ветку с тех пор, как сделали вишневые кирки? --cherry-pick
работает сначала путем сопоставления идентификатора фиксации, а затем, если это не удается, ищет идентификатор исправления. Если вы объединили master в свою ветку, то теперь у вас будет фактическая фиксация на вашей ветке и вишневая версия. Таким образом, он найдет идентификатор фиксации, а затем перейдет к сообщению о выбранной версии.
Я часто задавался вопросом, должен ли git всегда проверять оба, но это, вероятно, значительное снижение производительности.
Я часто задавался вопросом, должен ли git всегда проверять оба, но это, вероятно, значительный хит производительности.
это поведение теперь (Git 2.11, Q4 2016) быстрее, чем раньше.
посмотреть совершить 7c81040 (12 сентября 2016), и совершить 5a29cbc (09 Sep 2016) by Джефф Кинг (peff
).
Помог-by:Иоганнес Schindelin (dscho
).
(слитый Junio C Hamano -- gitster
-- на совершить f0a84de, 21 сентября 2016)
patch-ids
: отказаться от расчетаpatch-id
для слияния commit"
git log --cherry-pick
" используется для включения коммитов слияния в качестве кандидатов чтобы быть сопоставленным с другими коммитами, в результате чего много потерянного времени. Логика генерации patch-id была обновлена, чтобы игнорировать слияния с избежать потерь.[...] мы можем потратить много дополнительного времени на вычисление этих слияний разности.
В случае, который вдохновил этот патч,"git format-patch --cherry-pick
" упал с более чем 3 минут до менее чем 3 секунд.