Я знаю, что вы видели это, но вот два фрагмента из документов:
git diff [--options] <commit>..<commit> [--] [<path>...]
Это синоним предыдущей формы. (git diff [--options] <commit> <commit> [--] [<path>...]
)
git diff [--options] <commit>...<commit> [--] [<path>...]
Эта форма предназначена для просмотра изменений в ветви, содержащей и до второй, начиная с общего предка обоих. git diff A...B
эквивалентно git diff $(git-merge-base A B) B
.
Я вижу, как это может сбить вас с толку - нотации ..
и ...
для git diff не означают то же самое, что и для списка ревизий (например, для git log).
Итак, предположим, что наша история выглядит так:
A - B - C - D - E (master)
\
F - G (lab)
Первый фрагмент говорит нам, что git diff master..lab
эквивалентно git diff master lab
, другими словами git diff E G
. Это скажет нам о прямой разнице между E
и G
- т.е. мы увидим комбинацию F
, G
и обратные патчи D
и E
.
С другой стороны, git diff master...lab
эквивалентно git diff C G
- он показывает изменения до второго коммита (лаборатории), начиная с общего предка двух (базы слияния мастера и лаборатории, которая является C
). Разница, которую мы видим, будет комбинацией F
и G
. Не включает D
и E
.
Вариант использования для обозначения тройной точки - это когда вы хотите увидеть всю работу, которую вы проделали в своей ветке тем (лаборатории), которая еще не объединена с мастером. Вам все равно, что еще было сделано на мастере - вас интересует только работа, которую вы делаете в своей ветке тем.