Поскольку я уже создал эти изображения, я подумал, что, возможно, стоит использовать их в другом ответе, хотя описание различия между ..
(точка-точка) и ...
(точка-точка) -dot) по сути такой же, как в ответе manojlds .
Команда 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
покажет вам трехстороннее слияние.