stackoverflow.com/questions/7251477/...

орые команды Git принимают диапазоны фиксации, и один правильный синтаксис - разделять два имени фиксации двумя точками...и другой синтаксис использует три точки....

Каковы различия между этими двумя?

Ответы на вопрос(2)

Использование диапазонов коммитов с Git Log

Когда вы используете диапазоны фиксации, такие как.. а также... с участиемgit logразница между ними в том, что для ветвей А и В

git log A..B

покажет вамвсе коммиты, которые есть у B, которых нет, пока

git log A...B

покажет вамобе коммиты, которые есть у A, а у которых B нет, и коммиты, которые есть у B, которых нет у A, или другими словами,он отфильтрует все коммиты, которые разделяют и A, и B, таким образом, показывая только коммиты, которые онине оба разделяют.

Визуализация с диаграммами Венна и деревьями коммитов

Вот визуальное представлениеgit log A..B, Коммиты, содержащиеся в ветви B, которые не существуют в A, - это то, что возвращается диапазоном коммитов, подсвечивается красным на диаграмме Венна и обводится синим цветом в дереве коммитов:

 

Это диаграммы дляgit log A...B, Обратите внимание, что коммиты, которыеобщий по обеим веткам не возвращается команда:

 

Создание диапазона фиксации Triple Dot... Полезнее

Вы можете сделать диапазон фиксации тройной точки... более полезно в команде журнала с помощью--left-right возможность показать, какие коммиты принадлежат какой ветке:

$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt

В приведенном выше выводе вы увидите коммиты, которые принадлежатmaster имеют префикс<, в то время как коммиты, которые принадлежатorigin/master имеют префикс>.

Использование диапазонов коммитов с Git Diff

Когда-нибудь я мог бы добавить свое собственное объяснение того, как работают диапазоны фиксации.git diff, но сейчас вы можете проверитьКаковы различия между двойной точкой ".." и тройной точкой "..." в диапазонах коммитов Git diff?.

Смотрите такжеPro Git § 6.1 Инструменты Git - Выбор редакции - Диапазоны коммитов
 aerique23 июл. 2014 г., 12:57
Этот ответ на самом деле объясняет разницу с помощью краткого текста, примеров и рисунков. Мне он нравится намного лучше, чем ответ, получивший наибольшее количество голосов и цитирующий неясную документацию. (TL; д-р благодаря этому ответу я на самом деле понимаю разницу.)
 love21 июл. 2014 г., 20:28
@ cupcake-Спасибо за объяснение с правильными диаграммами. Это действительно полезно.
 Benjamin Atkin12 мая 2017 г., 21:37
По крайней мере, для git log. Для git diff, возможно, все наоборот:stackoverflow.com/questions/7251477/...
 Marius29 июл. 2014 г., 18:16
@Cupcake, не могли бы вы добавить значение ... в git diff?
 user45681429 июл. 2014 г., 18:21
@Marius на самом деле, теперь, когда вы подняли этот вопрос, я отвечу на другой вопрос в своем ответе для будущих читателей, таких как вы.
Решение Вопроса

log команда илиdiff команда. вlog дело, это вman git-rev-parse документация:

Чтобы исключить коммиты, достижимые из коммита, используется префикс ^. Например. ^ r1 r2 означает коммиты, достижимые из r2, но исключающие коммиты, достижимые из r1.

Эта операция установки появляется так часто, что для нее есть сокращение. Если у вас есть два коммита r1 и r2 (названные в соответствии с синтаксисом, объясненным в УКАЗАННЫХ ПЕРЕСМОТРАХ выше), вы можете запросить коммиты, которые достижимы из r2, за исключением коммитов, которые достижимы из r1 с помощью «^ r1 r2», и это можно записать как "r1..r2".

Подобное обозначение «r1 ... r2» называется симметричной разностью r1 и r2 и определяется как «r1 r2 - not $ (git merge-base --all r1 r2)». Это набор коммитов, которые доступны с одного из r1 или r2, но не с обоих.

Что в основном означает, что вы получите все коммиты, которые находятся в любой из двух веток, но не в обеих.

вdiff дело, это вman git-diff документация:

  git diff [--options] <commit>...<commit> [--] [<path>...]

      This form is to view the changes on the branch containing and up to
      the second <commit>, starting at a common ancestor of both
      <commit>. "git diff A...B" is equivalent to "git diff
      $(git-merge-base A B) B". You can omit any one of <commit>, which
      has the same effect as using HEAD instead.

Что немного нечетко. По сути, это означает, что он показывает только различия в этой ветви по сравнению с другой веткой: он ищет последний общий коммит с первым коммитом, который вы ему дали, а затем переводит в него второй коммит. Это простой способ увидеть, какие изменения внесены в эту ветку, по сравнению с этой веткой, без учета изменений только в этой ветке.

.. несколько проще: вgit-diff случай, это так же, какgit diff A B и просто разногласия A против B. Вlog В этом случае отображаются все коммиты, которые находятся в B, но не в A.

 ahnbizcad22 нояб. 2018 г., 02:10
@phiresky я знаю. что это, PHP? хр
 wisbucky31 окт. 2018 г., 22:36
@phiresky Да, это действительно плохое удобство использования. Я рекомендую не использовать точечные обозначения дляgit diff.
 phiresky30 окт. 2018 г., 21:52
Это довольно смешно, как смысл.. а также... точно поменяется местами для log и diff:log A..B это изменения от базы слияния к B, который является то, чтоdiff A...B делает

Ваш ответ на вопрос