В модели ветвления, где одна ветвь A всегда объединяется с другой B, как я могу перечислить все коммиты в B, но не в A, игнорируя все выбранные вишни коммиты и слияния?
a1-------b2' -- A
/ \ \
b1--b2--m1--b3--m2--b4 -- B
b2': cherry-picked commit
Inв этом случае он должен перечислить коммиты b3, b4
.
Некоторые исследования в руководстве по git:
Игнорирование слияний и выделенных коммитов уже решено с помощью опций --no-merges
и --cherry-*
git-log
команда.Но --cherry-*
используют симметричную разность коммитов (то есть A...B
), чтобы сопоставить вишневые пики.В этом примере commit b2 не является его частью.git log --cherry A...B
возвращает b2, b3, b4
.
Пример можно воспроизвести с помощью:
mkdir reprod; cd reprod; git init
git check-out -b B
git commit -m "b1" --allow-empty
git commit -m "b2" --allow-empty
git check-out -b A B^{/b1}
git commit -m "a1" --allow-empty
git cherry-pick --allow-empty B^{/b2}
git check-out B
git merge A^{/a1} --no-edit
git commit -m "b3" --allow-empty
git merge A^{/b2} --no-edit
git commit -m "b4" --allow-empty
git log A...B --cherry