git логарифм исключает предков нескольких базовых ссылок - PullRequest
0 голосов
/ 05 апреля 2020

Я часто использую git log <options> BASE..TARGET, чтобы показать диапазон коммитов.

Что это делает, основываясь на моем предыдущем опыте и понимании:

  • Включите TARGET и всех его предков.
  • Исключить BASE и всех его предков, даже если они являются предками TARGET.

Иногда вместо этого я хотел бы добиться следующего:

  • Включить TARGET и все его предки.
  • Исключить BASE_0 и всех его предков, даже если они являются предками TARGET.
  • Исключить BASE_1 и всех его предков, даже если они являются предками TARGET.
  • Исключить BASE_2 и всех его предков, даже если они являются предками TARGET.
  • ...

Типичным случаем использования будет поиск коммитов, которые находятся в ( = предки) данной ветви объектов, но они не находятся ни в (= предках) master, ни в специфической c другой ветви функций.

Очевидно, что синтаксис диапазона A..B здесь его не обрезает , Вместо этого должен быть такой параметр, как --exclude-ancestors-of=A_0,A_1,A_2, с синтаксисом, допускающим несколько ссылок.

Возможно ли это как-то?

1 Ответ

1 голос
/ 05 апреля 2020

Как прокомментировал j *ill , вы можете express это с:

git log TARGET ^BASE_0 ^BASE_1 ^BASE_2

(они могут go в любом порядке). Если у вас много отрицательных ссылок (приведенные выше выражения ^BASE_<em>number</em> являются отрицательными ссылками), вы можете упростить ввод текста с помощью:

git log TARGET --not BASE_0 BASE_1 BASE_2

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

git log --not BASE_0 BASE_1 BASE_2 --not TARGET

.

В Git есть множество способов express ревизий и диапазонов ревизий; см. документацию gitrevisions (или git help revisions) для получения достаточно полного списка. Обратите внимание, что синтаксис с двумя и тремя точками может иметь разные значения в нескольких командах. Команда git diff является наиболее показательным примером этого. Обратитесь к странице справочника каждой конкретной команды c Git, чтобы узнать, имеет ли она особое значение для этой команды, и если да, то каков ее смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...