git-status瓷器(机器可读)v2输出如下:
$ git status -b --porcelain=v2
# branch.oid d0de00da833720abb1cefe7356493d773140b460
# branch.head the-branch-name
# branch.upstream gitlab/the-branch-name
# branch.ab +2 -2
仅获取上游分支:
$ git status -b --porcelain=v2 | grep -m 1 "^# branch.upstream " | cut -d " " -f 3-
gitlab/the-branch-name
如果该分支没有上游,上述命令将产生空输出(或在设置 set -o pipefail
的情况下失败)。
git status -b --porcelain=v2 .non-existing-dir
。 - undefined另一种简单的方法是在git repo中使用
cat .git/config
这将列出本地分支的详细信息
type .git/config
而不是cat .git/config
,当然是在普通命令行上。 - khmarbaise不使用 grep
,仅显示当前分支信息:
git branch -vv --contains
这是缩写:
git branch -vv --contains HEAD
如果你当前的 HEAD 提交 ID 在其他分支中出现,那么这些分支也将显示出来。
如果你只想知道某个方法是否存在,还有一种方法(感谢osse):
if git rev-parse @{u} > /dev/null 2>&1
then
printf "has an upstream\n"
else
printf "has no upstream\n"
fi
git branch -r -vv
将列出包括远程的所有分支。
git remote show origin | grep "branch_name"
branch_name
需要替换为您的分支
git remote show origin
输出中的其他文本匹配 - 如果它被称为merges
或configure
,会发生什么? - Tom Swirly列出本地和远程分支:
$ git branch -ra
输出:
feature/feature1
feature/feature2
hotfix/hotfix1
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
如果你想找到任何分支的上游(与你所在的分支不同),这里是对@cdunn2001答案的略微修改:
git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}
这将为名为YOUR_LOCAL_BRANCH_NAME
的本地分支提供远程分支名称。
我尝试过这里提供的所有解决方案,但发现没有一个适用于所有情况:
该命令获取所有名称:
git branch -a --contains HEAD --list --format='%(refname:short)'
对于我的应用程序,我需要过滤掉HEAD & master引用,偏爱远程引用,并去除单词“origin/”。如果找不到这个条件,那么使用第一个没有/
或(
的非HEAD引用。
在这个答案的基础上,我想出了以下的.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
git status -b --porcelain
不同的是,它快速且易于解析。 - undefined
git remote show origin
。另一个问题的主要答案是一个包装在简单答案周围的Bash脚本,这可能对一些人有用。希望这个问题不会被完全关闭。 - cdunn2001