Команда git status
делает много вещей - вероятно, наиболее важным является то, что она запускает два git diff
с, чтобы выяснить, как ваш HEAD
коммит, ваш индекс и ваше рабочее деревосвязаны друг с другом, но первые несколько вещей, которые он делает:
- Напечатайте имя текущей ветви, если вы находитесь на ветви.
- Печать подсчитывает вперед и/ или позади, если вы находитесь на ветке и , эта ветвь имеет восходящий поток набор и , значения отличны от нуля.
Вы можете отключить счет вперед / назад с помощью --no-ahead-behind
или включить их с помощью --ahead-behind
.(По умолчанию включено.)
Чтобы вычислить количество, Git использует git rev-list --count
.Подробности о том, как это работает, см. В ветке git впереди и сзади для локальной ветки? Обратите внимание, что подсчет основан на восходящей настройке ветви, поэтому, если вы находитесь на ветке B
и восходящий поток - origin/<em>B</em>
, это результат подсчета коммитов, которые доступны из вашей ветви B
, но не из вашего имени для удаленного отслеживания origin/<em>B</em>
, и наоборот.Если origin/<em>B</em>
не соответствует текущему значению B
для origin
, этот счетчик не так полезен, как вы могли бы пожелать;запустите git fetch origin
, чтобы обновить его при необходимости.
Каждая ветвь имеет свой отдельный параметр восходящего потока.Любое одно имя ветви может иметь одно восходящее или отсутствующее.Вверх по течению обычно используется имя для удаленного отслеживания (origin/whatever
), но оно может быть любым именем, включая другие обычные локальные имена ветвей.Команда git branch --set-upstream-to
, или git branch --unset-upstream
, является основным современным способом манипулирования настройкой восходящего потока любого существующего имени ветви.(Фактическая настройка сложна и может быть изменена с помощью git config
или путем редактирования .git/config
.)
Что касается отсоединенного HEAD, упомянутого в комментариях, отсоединенный HEAD просто означает, что вы не находитесь на ветке.Этот режим является нормальным, когда вы запросили его, либо через git checkout --detach
, либо с помощью git checkout
для чего-то, что не является именем ветви.Как вы упоминаете, это также нормально, когда вы находитесь в середине операции перебазировки, которая еще не завершена.В этих случаях современный git status
выдает информативное сообщение о том, что вы находитесь в этом режиме отключенного HEAD, и (в некоторой степени) почему.
Поскольку у отключенного HEAD нет восходящего потока - только имена ветвей имеют восходящийнастройки - в этом режиме никогда нет отсчета вперед / назад.