Как мне перечислить все локальные ветви отслеживания, не помещенные в git? - PullRequest
0 голосов
/ 17 января 2020

Я работаю в репозитории git над несколькими ветвями отслеживания, и к концу дня я не знаю, перенесла ли я всю свою работу во все ветви.

Есть ли * Команда 1005 *, показывающая, какие ветви не выдвинуты, так что я могу оформить заказ и выполнить вытягивание, при необходимости объединить и затем pu sh?

1 Ответ

2 голосов
/ 17 января 2020

Предположение (или определение): под отслеживающей ветвью вы подразумеваете ветвь с установленным восходящим набором и , которая в восходящем направлении относится к имени удаленного отслеживания. Например, если ветвь develop имеет origin/develop в качестве восходящего потока, это считается; но если ветвь test имеет develop, установленный в качестве восходящего потока, то он не считается.

Возможная последовательность команд для использования в этом случае:

git fetch

, за которой следует:

git branch -vv | grep origin/

Вывод будет выглядеть примерно так:

* master          083378cc35 [origin/master] commit subject line
  xyz             8dbdf339cd [origin/xyz: ahead 1, behind 13] another subject line

, который говорит нам, что master обновлен, но xyz не синхронизирован c с его удаленным аналогом .

Обратите внимание, что если рассматриваемый восходящий поток не называется origin, вам необходимо соответствующим образом изменить команду grep. Вам также может понадобиться более одного git fetch или вы можете использовать git fetch --all. (Вы также можете использовать git fetch --prune или установить fetch.prune на true, но это здесь не зависит от всего остального.)


Можно написать более необычный скрипт, который печатает только names , пропускает ветки с синхронизацией c и т. Д. Если вы хотите сделать это, используйте git for-each-ref для перечисления ссылок в пространстве имен refs/heads/. Это твои названия веток. Для каждого имени проверьте, имеет ли оно значение восходящего направления, и если да, получите идентификатор ha sh его восходящего направления. Сравните это с ha sh ID филиала. Кроме того, проверьте, является ли восходящий канал локальным ответвлением (пример test выше, где восходящий поток develop) или именем удаленного отслеживания.

Если восходящий поток is имя удаленного отслеживания и ha sh идентификаторы локального имени и восходящего потока отличаются, ветвь не синхронизирована c с ее удаленным аналогом. Чтобы получить счет впереди и / или сзади, используйте:

git rev-list --count --left-right local...upstream

Счетом вперед будет напечатано первое число, а счетом позади будет второе.

...