这里有一个命令,可以列出所有已配置为“pull”的跟踪分支,请参见:
$ git branch -vv
main aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit
虽然需要浏览SHA和可能很长的提交消息,但这种方法打字快速,而且我可以使跟踪分支在第三列纵向对齐。
如果你需要关于每个分支的“拉取”和“推送”配置信息,请参见另一个回答:git remote show origin
。
更新
从git版本1.8.5开始,您可以使用git status
和git status -sb
显示上游分支。
git branch -av
或者git remote show origin
更加直接,因为它只提供被追踪的远程内容,而不会像这两个命令一样给出大量数据。 - SimplGygit status
和 git status -sb
中现在也会显示上游分支 -- 所以一旦你升级到1.8.5.x,这个问题(和答案)就不再相关了。 - jdsumsion两种选择:
% 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
git help revisions
(文档中鲜为人知但非常有用的部分之一),并搜索“upstream”。 - cdunn2001git diff \
git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`` 这样的操作。 - Jianecho 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
- albfangit for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)
,将SOMEBRANCH替换为分支名称,或使用"HEAD"来表示当前分支。 - Jonas Berlin我认为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)
git remote show origin
会显示本地分支以及它们对于推送和拉取的跟踪情况。 - dudewad更新:嗯,我发布这篇文章已经过去了几年!对于我的特定目的,即将HEAD与上游进行比较,我现在使用@{u}
,它是一个快捷方式,指的是上游跟踪分支的HEAD。 (请参见https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem)。
原始答案:我也遇到过这个问题。我经常在单个存储库中使用多个远程,很容易忘记当前分支正在跟踪哪个远程。有时候知道这一点很方便,比如当您想通过git log remotename/branchname..HEAD
查看本地提交时。
所有这些内容都存储在git配置变量中,但您不必解析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
git name-rev --name-only HEAD
不能告诉你当前所在的分支。要查看当前所在的分支,我通常使用命令 git branch | grep '^\*' | cut -d' ' -f2
。 - Altreus@{u}
别名/快捷方式,这正是我所需要的!如果你只想确定是否需要拉取,就没有必要与主分支进行比较。 - Dan M.@{u}
真是太棒了。它自 1.7.0 版本以来一直存在,这意味着如果在 2018 年某人使用的 git 中没有可用的版本,那么他们可能需要升级了。 - Chris Cleelandsymbolic-ref --short HEAD
命令获取当前分支的单词描述。 - Tom Hale本地分支和它们的远程分支。
git branch -vv
所有分支和追踪远程分支。
git branch -a -vv
查看哪些本地分支明确配置了推送和拉取。
git remote show {remote_name}
git remote show origin
实际上会显示我的远程URL。 - kingajgit push
时,你是否100%确定你正在推送到 origin
?对我来说并非如此,实际上我在这里寻找简单的答案,因为我的许多别名/快捷方式硬编码了 origin
,但有时我会使用多个远程仓库,所以这些别名/快捷方式对我来说是无效的。 - nhedgit
可以在不必进行多次调用的情况下回答它会更好。我去重新编写了几个以前硬编码 origin
的别名/函数。 - nhedgit branch -vv | grep 'BRANCH_NAME'
git branch -vv
:此部分将显示所有本地分支及其上游分支。
grep 'BRANCH_NAME'
:它将从分支列表中过滤出当前分支。
* 'BRANCH_NAME' <commit-sha> 'commit message'
如果有跟踪的分支
* 'BRANCH_NAME' <commit-sha> ['TRACKED_BRANCH_NAME']'commit message'
- TMin这将向您展示您所在的分支:
$ git branch -vv
这将仅显示您当前所在的分支:
$ git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
例如:myremote/mybranch
您可以通过以下命令找到当前分支使用的远程URL:
git config --get remote.origin.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
git remote get-url $(git for-each-ref --format='%(upstream:remotename)' $(git symbolic-ref -q HEAD))
- elboulangero你可以使用 git checkout
命令,即“检出当前分支”。如果存在,则该命令会显示当前分支的跟踪信息,但不会产生其他影响。
$ git checkout
Your branch is up-to-date with 'origin/master'.
还有另一种方式
git status -b --porcelain
这将为您提供
## BRANCH(...REMOTE)
modified and untracked files
## No commits yet on master...origin/master [gone]
。 - undefinedgit status -b --porcelain=v2
,请参考上面的警告。 - undefined我不确定这是否算作解析git配置输出,但这将确定主分支跟踪的远程仓库的URL:
$ git config remote.$(git config branch.master.remote).url
git config branch.$(git symbolic-ref -q HEAD).remote
;要获取 URL,请使用 git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
。 - Anakhand--short
选项以使其工作。因此,获取当前分支的远程名称:git config branch.$(git symbolic-ref -q --short HEAD).remote
,并获取当前分支远程的 URL :git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
。 - Nelson
git remote show origin
。另一个问题的主要答案是一个包装在简单答案周围的Bash脚本,这可能对一些人有用。希望这个问题不会被完全关闭。 - cdunn2001