Узнайте, какая удаленная ветвь отслеживает локальную ветку
Смотрите также:
Как я могу увидеть, какие ветки Git отслеживают, какая ветка удаленной/восходящей?
Как я могу узнать, какую удаленную ветку отслеживает локальная ветка?
Нужно ли анализировать выходные данные git config
, или есть команда, которая сделает это для меня?
Ответы
Ответ 1
Здесь - это команда, которая дает вам все ветки отслеживания (сконфигурированные для 'pull'), смотрите:
$ git branch -vv
main aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit
Вам нужно пройтись по SHA и любым сообщениям коммита с длинным переносом, но он быстро набирается, и я отслеживаю ветки отслеживания вертикально в 3-м столбце.
Если вам нужна информация о конфигурации "pull" и "push" для каждой ветки, см. другой ответ на git remote show origin
.
Обновление
Начиная с git версии 1.8.5, вы можете показать ветку upstream с git status
и git status -sb
Ответ 2
Два варианта:
% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline
или же
% git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)"
origin/mainline
Ответ 3
Я думаю, что git branch -av
сообщает вам, какие у вас есть ветки и какие они совершают, оставляя вас для определения того, какие удаленные ветки отслеживают локальные ветки.
git remote show origin
явно указывает вам, какие ветки отслеживают удаленные ветки. Вот пример вывода из репозитория с одним фиксатором и удаленной ветвью, называемой abranch
:
$ git branch -av
* abranch d875bf4 initial commit
master d875bf4 initial commit
remotes/origin/HEAD -> origin/master
remotes/origin/abranch d875bf4 initial commit
remotes/origin/master d875bf4 initial commit
против
$ git remote show origin
* remote origin
Fetch URL: /home/ageorge/tmp/d/../exrepo/
Push URL: /home/ageorge/tmp/d/../exrepo/
HEAD branch (remote HEAD is ambiguous, may be one of the following):
abranch
master
Remote branches:
abranch tracked
master tracked
Local branches configured for 'git pull':
abranch merges with remote abranch
master merges with remote master
Local refs configured for 'git push':
abranch pushes to abranch (up to date)
master pushes to master (up to date)
Ответ 4
Обновление: Ну, прошло несколько лет с тех пор, как я опубликовал это! Для моей конкретной цели сравнения HEAD с восходящим потоком я теперь использую @{u}
, который является ярлыком, который ссылается на HEAD ветки отслеживания восходящего потока. (См. https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem).
Оригинальный ответ: Я столкнулся с этой проблемой. Я часто использую несколько пультов в одном хранилище, и легко забыть, с какой стороны отслеживается ваша текущая ветка. И иногда это удобно знать, например, когда вы хотите посмотреть свои локальные коммиты через git log remotename/branchname..HEAD
.
Все эти данные хранятся в переменных git config, но вам не нужно разбирать вывод конфигурации git. Если вы вызываете 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
Ответ 5
Локальные ветки и их пульты.
git branch -vv
Все ветки и пульты дистанционного управления.
git branch -a -vv
Смотрите, где локальные ветки явно настроены для push и pull.
git remote show {remote_name}
Ответ 6
Это покажет вам ветку, в которой вы находитесь:
$ git branch -vv
Это покажет только текущую ветку, в которой вы находитесь:
$ git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
например:
myremote/mybranch
Вы можете узнать URL-адрес удаленного, который используется текущей веткой, с которой вы работаете:
$ git remote get-url $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)|cut -d/ -f1)
например:
https://github.com/someone/somerepo.git
Ответ 7
Вы можете использовать git checkout
, т.е. "проверить текущую ветку". Это no-op с побочными эффектами для отображения информации отслеживания, если она существует, для текущей ветки.
$ git checkout
Your branch is up-to-date with 'origin/master'.
Ответ 8
Я не знаю, учитывается ли это как синтаксический анализ вывода конфигурации git, но это будет определять URL-адрес удалённого объекта, который мастер отслеживает:
$ git config remote.$(git config branch.master.remote).url
Ответ 9
Еще один способ
git status -b --porcelain
Это даст вам
## BRANCH(...REMOTE)
modified and untracked files
Ответ 10
Еще один простой способ - использовать
cat .git/config
в git repo
Здесь будут перечислены детали локальных ветвей
Ответ 11
Другой метод (спасибо osse), если вы просто хотите узнать, существует ли он:
if git rev-parse @{u} > /dev/null 2>&1
then
printf "has an upstream\n"
else
printf "has no upstream\n"
fi
Ответ 12
git branch -r -vv
отобразит все ветки, включая удаленный.
Ответ 13
Перечисляет как локальные, так и удаленные ветки:
$ git branch -ra
Выход:
feature/feature1
feature/feature2
hotfix/hotfix1
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
Ответ 14
Если вы хотите найти восходящую ветку для любой ветки (в отличие от той, на которой вы находитесь), вот небольшое изменение в ответе @cdunn2001:
git rev-parse --abbrev-ref --symbolic-full-name [email protected]{upstream}
Это даст вам имя удаленной ветки для локальной ветки с именем YOUR_LOCAL_BRANCH_NAME
.
Ответ 15
Я использую EasyGit (a.k.a. "eg" ) как супермассивную упаковку поверх (или вдоль стороны) Git. У EasyGit есть подкоманда "info", которая дает вам все виды супер полезной информации, включая ветку удаленного отслеживания веток. Здесь пример (где текущее название ветки "foo" ):
[email protected]: (foo) ~/workspace/bd
$ eg info
Total commits: 175
Local repository: .git
Named remote repositories: (name -> location)
origin -> git://sahp7577/home/pknotz/bd.git
Current branch: foo
Cryptographic checksum (sha1sum): bd248d1de7d759eb48e8b5ff3bfb3bb0eca4c5bf
Default pull/push repository: origin
Default pull/push options:
branch.foo.remote = origin
branch.foo.merge = refs/heads/aal_devel_1
Number of contributors: 3
Number of files: 28
Number of directories: 20
Biggest file size, in bytes: 32473 (pygooglechart-0.2.0/COPYING)
Commits: 62
Ответ 16
Я использую этот псевдоним
git config --global alias.track '!sh -c "
if [ \$# -eq 2 ]
then
echo \"Setting tracking for branch \" \$1 \" -> \" \$2;
git branch --set-upstream \$1 \$2;
else
git for-each-ref --format=\"local: %(refname:short) <--sync--> remote: %(upstream:short)\" refs/heads && echo --URLs && git remote -v;
fi
" -'
затем
git track
обратите внимание, что script также может использоваться для настройки отслеживания.
Более великие псевдонимы на https://github.com/orefalo/bash-profiles
Ответ 17
Вы можете попробовать это:
git remote show origin | grep "branch_name"
имя_в ветки нужно заменить на ветку ур
Ответ 18
Если вы используете Gradle,
def gitHash = new ByteArrayOutputStream()
project.exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = gitHash
}
def gitBranch = new ByteArrayOutputStream()
project.exec {
def gitCmd = "git symbolic-ref --short -q HEAD || git branch -rq --contains "+getGitHash()+" | sed -e '2,\$d' -e 's/\\(.*\\)\\/\\(.*\\)\$/\\2/' || echo 'master'"
commandLine "bash", "-c", "${gitCmd}"
standardOutput = gitBranch
}
Ответ 19
Улучшая этот ответ, я придумал эти псевдонимы .gitconfig
:
branch-name = "symbolic-ref --short HEAD"
branch-remote-fetch = !"branch=$(git branch-name) && git config branch.\"$branch\".remote || echo origin #"
branch-remote-push = !"branch=$(git branch-name) && git config branch.\"$branch\".pushRemote || git config remote.pushDefault || git branch-remote-fetch #"
branch-url-fetch = !"remote=$(git branch-remote-fetch) && git remote get-url \"$remote\" #" # cognizant of insteadOf
branch-url-push = !"remote=$(git branch-remote-push ) && git remote get-url --push \"$remote\" #" # cognizant of pushInsteadOf
Ответ 20
Следующая команда будет удалять текущее fork, ссылаясь на
git remote -v
Чтобы добавить удаленный путь,
git удаленное добавление имени пути