Подтвердить что ты не робот

Показать git впереди и позади информации для всех ветвей, включая пульты

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

git branch ahead behind

Есть ли инструмент командной строки, который делает что-то подобное? Что-то, что работает с пультами? Например,

git branch -v -v

близок к тому, что я ищу, но работает только для локальных ветвей.

4b9b3361

Ответ 1

Мне тоже было интересно, так что я просто взломал git branch-status script, который дает эту информацию, используя git for-each-ref

#!/bin/bash
# by http://github.com/jehiah
# this prints out some branch status (similar to the '... ahead' info you get from git status)

# example:
# $ git branch-status
# dns_check (ahead 1) | (behind 112) origin/master
# master (ahead 2) | (behind 0) origin/master

git for-each-ref --format="%(refname:short) %(upstream:short)" refs/heads | \
while read local remote
do
    [ -z "$remote" ] && continue
    git rev-list --left-right ${local}...${remote} -- 2>/dev/null >/tmp/git_upstream_status_delta || continue
    LEFT_AHEAD=$(grep -c '^<' /tmp/git_upstream_status_delta)
    RIGHT_AHEAD=$(grep -c '^>' /tmp/git_upstream_status_delta)
    echo "$local (ahead $LEFT_AHEAD) | (behind $RIGHT_AHEAD) $remote"
done

Использование:

$ git branch-status
dns_check (ahead 1) | (behind 112) origin/master
master (ahead 2) | (behind 0) origin/master

Ответ 2

Обновление 2015

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

С Git 2.5+ правильная команда:

git for-each-ref --format="%(refname:short) %(upstream:track)" refs/heads

См. больше на Просмотр Unpushed Git Commits".

(как указано void.pointer в комментариях, upstream:track точнее, чем push:track, в зависимости от политики default push)


Git 2.13 (Q2 2017) использует более общий API-фильтр ref-фильтра с более полным git for-each-ref push:

См. commit 3d9e4ce, commit 949af06, commit 56b4360, совершить 6eac70f, commit 1a34728, совершить 1a0ca5e, commit 3a42980, commit 17938f1, commit 3ba308c, совершить a798410, commit b180e6f, commit 01f9582, совершить 7743fcc, commit ffd921d, commit 99c6a71, commit d4919bb, commit 42d0eb0, commit 4f3e3b3, commit c58f c85 (10 января 2017 г.) Karthik Nayak (KarthikNayak).
(объединено Junio ​​C Hamano - gitster - в commit 93e8cd8, 27 февраля 2017 г.)

push:

Имя локального ref, который представляет местоположение @{push} для отображаемого ссылки.
Соответствует :short, :lstrip, :rstrip, :track и :trackshort параметрам как upstream.
Производит пустую строку, если не настроен @{push} ref.

Если добавлено lstrip=<N> (rstrip=<N>), разделите <N> компоненты пути, разделенные косой чертой, с фронта (назад) (например, %(refname:lstrip=2) превращает refs/tags/foo в foo и %(refname:rstrip=2) превращает refs/tags/foo в refs).

Если <N> - отрицательное число, разделите как можно больше компонентов пути с указанного конца, чтобы оставить компоненты пути -<N>(например, %(refname:lstrip=-2) превращает refs/tags/foo в tags/foo и %(refname:rstrip=-1) превращает refs/tags/foo в refs)


Оригинальный ответ (2014)

Другой способ будет доступен с Git 1.9/2/0 (Q1 2014).
См. commit b28061c из Рамкумар Рамачандра (artagnon):

for-each-ref: ввести %(upstream:track[short])

Введение:

  • %(upstream:track) для отображения "[ahead M, behind N]" и
  • %(upstream:trackshort) для отображения "=", ">", "<" или "<>" соответственно (на основе contrib/completion/git-prompt.sh).

Теперь вы можете использовать следующий формат for-each-ref:

%(refname:short) %(upstream:trackshort)

для отображения ссылок с краткой информацией отслеживания.

Обратите внимание, что :track и :trackshort работают только с "upstream" и выходят из строя при использовании чего-либо еще.

Ответ 3

Для этого типа проблем вы можете использовать "Gitk" `

sudo apt-get update
sudo apt-get install gitk

Это может помочь вам. Вы даже можете увидеть git впереди для всех ветвей