"A..B" (двойная точка) против "- только справа A...B" (отфильтрованная тройная точка) в диапазонах коммитов Git?
Сравните Каковы различия между двойной точкой ".." и тройной точкой "..." в диапазонах коммитов Git? , более полезный вопрос.
Я хотел бы уточнить, производят ли следующие команды тот же набор коммитов, что и git log A..B
:
# version 1
git log --right-only A...B
# version 2
#
# (The sed part keeps only the righthand lines, and strips the > character)
git log --left-right --format=oneline A...B | sed -n "s/^>//p"
Казалось бы , они являются более окольными способами сделать то же самое.
Первоначальной мотивацией было получить более глубокое понимание значения этих команд, которые включают игнорирование уже выбранных коммитов:
# version 1a
#
# Literally taken from the git-log help page, which explains what this means
git log --cherry-pick --right-only A...B
# version 2a
#
# This is a simplified version of something in the git code. (In particular,
# in git-rebase--interactive.sh.)
git log --left-right --cherry-pick --no-merges --format=oneline A...B | sed -n "s/^>//p"
Расширение этого вопроса состоит в том, чтобы спросить, почему симметричное различие (то есть тройная точка) требуется для такого рода "одностороннего" устранения вишни. Например, чтобы найти уникальные коммиты на B, включая исправление для вишневых пиков, не следует ли делать что-то столь же простое, как
git log --cherry-pick A..B
Я полагаю, это потому, что git применяет логику удаления вишни после того, как он отфильтровывает все коммиты A с A..B
, (То есть в этой гипотетической команде git выбрасывает все, что связано с A, прежде чем пытаться применить логику выбора вишни.)
1 ответ
git log --cherry-pick A..B
Такой же как
git log --cherry-pick ^A B
Это в основном все коммиты B, которые являются частью примечания A. Если все коммиты A отброшены, то с чем Git должен сравнивать вишневый пик?