Поскольку я уже создал эти изображения, я подумал, что, возможно, стоит использовать их в другом ответе, хотя описание различия между ..
(точка-точка) и ...
(точка-точка-точка) по существу такое же, как и в ответе Манойлда .
Команда git diff
обычно показывает только разницу между состояниями дерева между двумя точками в графе фиксации. В ..
и ...
условных обозначениях в git diff
имеют следующие значения:
Другими словами, git diff foo..bar
это точно так же, как git diff foo bar
; оба покажут вам разницу между кончиками двух веток foo
и bar
. С другой стороны, git diff foo...bar
покажет вам разницу между «базой слияния» двух ветвей и кончиком bar
. «База слияния» обычно является последним общим коммитом между этими двумя ветвями, поэтому эта команда покажет вам изменения, внесенные вашей работой bar
, при этом игнорируя все, что было сделано foo
за это время.
Это все, что вам нужно знать о ..
и ...
обозначения в git diff
. Тем не мение...
... общий источник путаницы здесь является то , что ..
и ...
означает , тонко разные вещи , когда используется в команде , таких как git log
, ожидающий набор коммитов как один или более аргументов. (Все эти команды в конечном итоге используются git rev-list
для анализа списка коммитов по их аргументам.)
Значение ..
и ...
для git log
может быть показано графически, как показано ниже:
Итак, git rev-list foo..bar
показывает вам все на ветке, bar
что не на ветке foo
. С другой стороны, git rev-list foo...bar
показывает все коммиты, которые есть в одном foo
или bar
, но не в обоих . Третья диаграмма просто показывает, что если вы перечислите две ветви, вы получите коммиты, которые находятся либо в одной, либо в обеих.
Ну, я нахожу, что все это немного сбивает с толку, и я думаю, что диаграммы коммитов помогают :)
¹ Я говорю только «как правило», поскольку, например, при разрешении конфликтов слияния git diff
вы увидите трехстороннее слияние.
..
и...
вgit diff
и их различные значения вgit log
.