1

Я хотел бы посмотреть документацию по синтаксису Git .. которая используется, например, в такой команде, как git log master.. которая перечисляет коммиты в моей ветке, а не в master. Я хотел бы знать, как они формулируют документацию, чтобы я мог объяснить это точно и кратко коллегам.

Вот поиски, которые я пробовал

Результаты все довольно плохие. Есть ли лучший способ поиска документации по конкретному языку использования синтаксиса пунктуации, как в Git ..?

1 ответ1

2

Я хотел бы посмотреть документацию по синтаксису Git ..

который используется, например, в такой команде, как git log master..

Они называются Double Dot .. и Triple Dot ... Технические характеристики

Вы также видите их как Синтаксис диапазона или Синтаксис точки.

Поиск по любому из этих условий на http://www.google.com вернет полезные результаты.


Краткое содержание

Git Log A ..B (две точки)

Хотя этот синтаксис выглядит как "диапазон" коммитов от A до B, на самом деле это короткий путь для git log ^A B:

  • показать все коммиты, доступные из B; Сам B включен
  • исключая те, которые достижимы из A; А само по себе исключено

Итак, учитывая следующую историю (самые старые коммиты слева, самые новые справа):

*--*--*--A--*--*--*--B

git log A..B покажет все коммиты справа от A.

Обратите внимание, что git log A.. эквивалентен git log A..HEAD .

git log A ...B (три точки)

Страница руководства git-rev-list описывает это как специальную запись для "симметричной разности".

Это эквивалентно git log A B --not $(git merge-base --all A B) .

На простом английском языке это означает «все коммиты, которые доступны из A или B, но не из обоих.

Синтаксис Source Git "range" или "dot"


Подробное резюме

Двойная точка

Наиболее распространенная спецификация диапазона - это синтаксис с двумя точками. Это в основном просит Git разрешить диапазон коммитов, которые достижимы из одного коммита, но недоступны из другого. Например, скажем, у вас есть история коммитов, которая выглядит следующим образом:

Вы хотите увидеть, что находится в вашей ветке эксперимента, которая еще не была объединена с вашей основной веткой. Вы можете попросить Git показать вам журнал только тех коммитов с master..experiment - это означает, что «все коммиты достижимы экспериментом, но не достижимы master». Для краткости и ясности в этих примерах я буду использовать буквы объектов фиксации на диаграмме вместо фактического вывода журнала в том порядке, в котором они будут отображаться:

$ git log master..experiment
D
C

Если, с другой стороны, вы хотите увидеть обратное - все коммиты в master, которые не находятся в эксперименте - вы можете поменять имена веток. Эксперимент ... Мастер показывает вам все в мастер не достижимо из эксперимента:

$ git log experiment..master
F
E

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

$ git log origin/master..HEAD

Эта команда показывает вам любые коммиты в вашей текущей ветке, которых нет в основной ветке вашего удаленного источника. Если вы запустили git push, а ваша текущая ветвь отслеживает origin/master, то коммиты перечислены в git log origin/master.HEAD - это коммиты, которые будут переданы на сервер. Вы также можете оставить одну сторону синтаксиса, чтобы Git принял HEAD. Например, вы можете получить те же результаты, что и в предыдущем примере, набрав git log origin/master. - Git заменяет HEAD, если одна сторона отсутствует.

Несколько очков

Синтаксис с двумя точками полезен как сокращение; но, возможно, вы хотите указать более двух ветвей, чтобы указать вашу ревизию, например, посмотреть, какие коммиты есть в любой из нескольких веток, которых нет в той ветке, в которой вы находитесь. Git позволяет вам сделать это, используя символ ^ или - не перед любой ссылкой, из которой вы не хотите видеть достижимые коммиты. Таким образом, эти три команды эквивалентны:

$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA

Это хорошо, потому что с помощью этого синтаксиса вы можете указать в запросе более двух ссылок, чего нельзя сделать с помощью синтаксиса с двумя точками. Например, если вы хотите увидеть все коммиты, которые доступны из refA или refB, но не из refC, вы можете ввести один из них:

$ git log refA refB ^refC
$ git log refA refB --not refC

Это создает очень мощную систему запросов о пересмотре, которая должна помочь вам определить, что находится в ваших ветках.

Тройная точка

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

Если вы хотите увидеть, что находится в мастере или эксперименте, но не какие-либо общие ссылки, вы можете запустить

$ git log master...experiment
F
E
D
C

Опять же, это дает вам нормальный вывод журнала, но показывает только информацию о коммите для этих четырех коммитов, отображаемую в традиционном порядке даты фиксации.

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

$ git log --left-right master...experiment
< F
< E
> D
> C

С помощью этих инструментов вы можете гораздо проще сообщить Git, какие коммиты или коммиты вы хотите проверить.

Source Git Tools - Выбор редакции

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .