Как считать коммиты позади / впереди между восходящим и локальным отделением? - PullRequest
1 голос
/ 04 апреля 2020

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

git rev-list --count upstream/master..master возвращает 0, несмотря на тот факт, что в восходящем направлении несколько коммитов впереди локальной ветки master.

Ответы [ 2 ]

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

Рассмотрите возможность использования трехточечной нотации и флага --left-right:

git rev-list --left-right --count upstream/master...master

Как описано в документации gitrevisions , трехточечная нотация A...B создает симметрия c разница наборов коммитов достижимы из двух идентификаторов или га sh идентификаторов A и B. (Более подробную информацию о достижимости см. Думайте как (а) Git.)

Обычно это будет просто:

  • все коммиты на upstream/master, которые не на master, плюс
  • все коммиты на master, которые не на upstream/master

, что было бы просто сумма. Но добавление --left-right говорит Git к разбиению наборов на две части. Без --count вы получите список, помеченный маркерами < и >, который сообщит вам, какой коммит с каким идентификатором связан с sh. С --count вы получаете два счета. В этом случае, если upstream/master строго опережает master, первый счет будет ненулевым, а второй - нулем. Например, если upstream/master на 2 впереди, вывод будет 2 0.

Это работает, если вы также поменяете местами имена; просто теперь счет меняется. В приведенном выше случае вы теперь получите 0 2.

Выберите любой понравившийся вам порядок и получите оба счета или используйте двухточечную запись, чтобы получить только один счет. Единственное число, которое вы получите, с A..B, это количество коммитов, достижимых с B, но не достижимых с A. Если upstream/master «впереди» и вам нужен этот счет, вам нужно master..upstream/master при использовании двухточечного метода.

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

Количество коммитов в восходящем направлении опережает мастер:

git rev-list --count master..upstream/master

master..upstream/master - это диапазон коммитов в восходящем, но не в мастере. Это эквивалентно upstream/master ^master.

См. В чем разница между двойной точкой ".." и тройной точкой "..." в Git диапазонах фиксации? для получения дополнительной информации информация.

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