Обновление: Ну, прошло несколько лет с тех пор, как я опубликовал это! Для моей конкретной цели сравнения HEAD и восходящего потока я сейчас использую @{u}
, что является ярлыком, который ссылается на HEAD восходящей ветви отслеживания. (См. Https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).
Оригинальный ответ: я тоже сталкивался с этой проблемой. Я часто использую несколько пультов в одном репозитории, и легко забыть, какой из них отслеживает ваша текущая ветка. И иногда это полезно знать, например, когда вы хотите посмотреть свои локальные коммиты через git log remotename/branchname..HEAD
.
Все это хранится в переменных git config, но вам не нужно анализировать выходные данные git config. Если вы вызываете git config, за которым следует имя переменной, она просто напечатает значение этой переменной, анализ не требуется. Имея это в виду, вот несколько команд для получения информации о настройке отслеживания вашей текущей ветки:
LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`
В моем случае, так как меня интересует только имя моего текущего пульта, я делаю это:
git config branch.`git name-rev --name-only HEAD`.remote
git remote show origin
. Основным ответом на другой вопрос является сценарий bash, обернутый вокруг простого ответа, который может быть полезен для некоторых. Надеюсь, этот вопрос не будет полностью закрыт.