Каковы различия между следующими командами ?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Руководство по разным говорит об этом:
Сравнение ветвей
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Изменения между подсказками темы и основными ветками.
- То же, что и выше.
- Изменения, которые произошли в основной ветке с момента запуска ветки темы.
но не совсем понятно для меня
..
и...
вgit diff
и их различные значения вgit log
.Ответы:
Поскольку я уже создал эти изображения, я подумал, что, возможно, стоит использовать их в другом ответе, хотя описание различия между
..
(точка-точка) и...
(точка-точка-точка) по существу такое же, как и в ответе Манойлда .Команда
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 diff
( по сравнению сgit rev-list
)!git diff foo..bar
точно так же, какgit diff foo bar
; оба покажут вам разницу между кончиками двух ветвей foo и bar». Что именно вы подразумеваете под «разницей между кончиками двух ветвей»?Моя консолидированная версия .. vs ... с журналом diff vs
источник
..
/...
stuff. Напримерlog A...B
, не ясно, возвращает ли команда пересечение (белая часть диаграммы) или остальную часть объединения AB (зеленая). Это было бы ближе к делу без каких-либо установленных операндов и только с одним цветом.diff A..B
<->log A...B
, то есть ли на самом деле разница с 2 точками, соответствуют войти с 3 - мя точками (!)? Или есть опечатка на изображении. Глядя на то, как точки имеют цветовую кодировку, мне кажется, что на изображении есть опечатка. Нижний левый угол:log A...B
должен бытьlog A..B
, правый (?). И войти просто вправо быть...
не должно..
.git diff foo master
Различаются между верхними (головными) коммитами foo и master.git diff foo..master
Еще один способ сделать то же самое.git diff foo...master
Отличаются от общего предка (git merge-base foo master
) foo и master до кончика master. Другими словами, показывает только те изменения, которые внесла основная ветка с момента ее общего предка с foo.Этот пример из GitHub объясняет, когда использовать два:
источник
покажет различия между темой и основной веткой на данный момент
это также покажет различия между темой и основной веткой в данный момент времени
это покажет все различия между тем, когда тема была сделана из ветки и после
поэтому первые 2 команды одинаковы, а последняя просто показывает более широкое представление в истории diff
источник
Верхняя картинка эквивалентна нижней диаграмме дерева
Картинка стоит тысячи слов, разница между ними
..
...
^
показана ниже.источник