В отличие от других систем контроля версий, с которыми вы, возможно, знакомы, коммиты не относятся ни к какой ветви. Вместо этого ветка - это просто метка, указывающая на фиксацию. Нет однозначного ответа на вопрос, «к какой ветви принадлежит коммит» или «в какой ветке был написан коммит». Вместо этого вы можете только сказать, какие коммиты доступны ветке. И это именно то, что делает %S
. Он работает так же, как --source
.
--source
Print out the ref name given on the command line by which each commit was
reached.
В вашем случае первые два коммита 052b272 и adbf0ae доступны по нескольким веткам. В вашем первом примере мастер. По вашему второму мастеру и В-1. А в третьем - от мастера, B-1 и B-2.
git log --all
работает путем обхода графика фиксации, начиная с каждой ссылки. Если он может достичь фиксации по нескольким ссылкам, он выбирает ту ссылку, с которой он начинал, когда печатает строку журнала. В вашем втором протоколе можно было легко сказать, что они пришли от B-1 или мастера. Если вы сделаете еще одну фиксацию, она может измениться.
Если вы запустите git log
без --all
, он будет говорить HEAD
для всех коммитов, потому что без --all
он работает в обратном направлении только с HEAD
, текущая фиксация.