Git впереди/за информацией между мастером и веткой?

Я создал ветку для тестирования в своем локальном репо (test-branch), который я нажал на Github.

Если я перейду в свою учетную запись Github и выберите этот test-branch, он отобразит информацию:

This branch is 1 commit ahead and 2 commits behind master

Мои вопросы:

  • Как я могу отображать эту информацию локально (т.е. команда, которая показывает это на терминале, вместо того, чтобы открывать Github, чтобы увидеть ее)?
  • Я знаю, что вижу различия между ветвями, используя:

    git diff master..test-branch
    

    или используя Meld (что я предпочитаю):

    git difftool master..test-branch
    

    но мне было интересно, есть ли способ увидеть, что впереди и за что-то происходит отдельно. И.Е.: Есть ли способ показать, что 1 совершает сам по себе, а затем эти 2 совершают позади себя?

Ответ 1

Вот трюк, который я нашел, чтобы сравнить две ветки и показать, сколько коммитов каждая ветвь впереди другой (более общий ответ на ваш вопрос 1):

Для локальных ветвей: git rev-list --left-right --count master...test-branch

Для удаленных веток: git rev-list --left-right --count origin/master...origin/test-branch

Это дает следующие результаты:

1 7

Этот вывод означает: "По сравнению с master test-branch имеет 7 фиксаций вперед и 1 фиксация позади".

Вы также можете сравнить локальные ветки с удаленными ветвями, например, origin/master...master чтобы узнать, сколько мест совершает локальная master ветвь впереди/за ее удаленным партнером.

Ответ 2

Прежде всего, чтобы увидеть, сколько ревизий вы находитесь за локально, вы должны сделать git fetch, чтобы убедиться, что у вас есть последняя информация с вашего пульта.

Вывод по умолчанию git status по умолчанию показывает вам, сколько ревизий вы впереди или позади, но обычно я считаю это слишком подробным:

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

Я предпочитаю git status -sb:

$ git status -sb
## master...origin/master [ahead 2, behind 1]

На самом деле я имею в виду это просто git s, и это основная команда, которую я использую для проверки состояния.

Чтобы увидеть разницу в "предстоящих ревизиях" master, я могу исключить "позади ревизий" из origin/master:

git diff master..origin/master^

Чтобы увидеть разницу в "позади ревизий" origin/master, я могу исключить "вперед ревизии" из master:

git diff origin/master..master^^

Если есть 5 ревизий впереди или сзади, может быть проще написать вот так:

git diff master..origin/master~5
git diff origin/master..master~5

UPDATE

Чтобы увидеть изменения вперед/назад, ветвь должна быть настроена для отслеживания другой ветки. Для меня это поведение по умолчанию, когда я клонирую удаленный репозиторий, и после того, как я нажму ветку с помощью git push -u remotename branchname. Моя версия 1.8.4.3, но она работает так, как я помню.

Начиная с версии 1.8 вы можете настроить ветвь отслеживания следующим образом:

git branch --track test-branch

Начиная с версии 1.7, синтаксис был другим:

git branch --set-upstream test-branch

Ответ 3

С Git 2.5+ теперь у вас есть еще один вариант увидеть вперед/назад для всех ветвей, которые настроены на нажатие на ветку.

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

Подробнее в разделе Просмотр Unpushed Git Commits"

Ответ 4

После выполнения git fetch вы можете запустить git статус, чтобы показать, сколько мест совершает локальная ветка впереди или позади удаленной версии ветки.

Это не покажет вам, сколько из них совершает движение вперед или назад от другой ветки. Ваши варианты - это полный разброс, просмотр github или использование такого решения, как Vimhsa, связанное выше: Git статус по всем репо

Ответ 5

Это может не отвечать на ваш вопрос напрямую, но почему бы не использовать SourceTree