Сначала идите к Думайте, как (а) Git .Прочитайте все это или, по крайней мере, на странице под названием «Экспериментирование с Git», и продолжайте работать с ней, пока не поймете понятие достижимость и то, как Git использует ссылки .
Теперь вы знаете все, что вам нужно знать, чтобы понять синтаксис с двумя и тремя точками, которые предлагает командная строка Git:
A...B
- это набор коммитов, достижимый из либо name-или-хэш-ID A
или name-or-hash-ID B
, но не из обоих имен.Между тем:
A..B
- это набор коммитов, достижимых с B
, исключая набор коммитов, достижимых с A
. Это, вероятно, но не обязательно, то, что вы хотите.
Когда commit A
является предком commit B
, вы можете захотеть установить другой набор, нежели любой из них.В частности, вам может потребоваться набор всех коммитов, начиная с A
, которые являются потомками A
и предками B
.Универсального синтаксиса для этого не существует, но он доступен через git rev-list
(и, следовательно, через git log
) как:
git rev-list --ancestry-path A..B
Обратите внимание, что здесь пропускается A
, но он включает B
, каквариант A..B
без --ancestry-path
.(Вы можете добавить --boundary
, чтобы включить A
здесь, но остерегайтесь некоторых странных побочных эффектов от --boundary
в более общих случаях.)
Вариант с --ancestry-path
- это то, что вам нужно, если простоA..B
это не то, что вы хотите.Между этими двумя вариациями обычно отражается несколько скользкое понятие «между» в ориентированном ациклическом графе.