我知道我可以做git分支——所有,它显示了本地和远程分支,但它在显示它们之间的关系时并不是那么有用。
如何以显示哪个本地分支正在跟踪哪个远程的方式列出分支?
我知道我可以做git分支——所有,它显示了本地和远程分支,但它在显示它们之间的关系时并不是那么有用。
如何以显示哪个本地分支正在跟踪哪个远程的方式列出分支?
当前回答
Git配置:get-regexp "branch\.$current_branch\.remote"
会告诉你被跟踪的遥控器的名字吗
Git配置:get-regexp "branch\.$current_branch\.merge"
将为您提供被跟踪的远程分支的名称。
您需要将$current_branch替换为当前分支的名称。你可以通过git rev-parse——abbrev-ref HEAD动态获取
下面的迷你脚本结合了这些内容。把它放在一个名为git-tracking的文件中,使其可执行,并确保它在您的路径中。
然后你可以说
$ git tracking
<current_branch_name>-><remote_repo_name>/<remote_branch_name>
注意,远程分支名称可以与本地分支名称不同(尽管通常不是)。例如:
$git tracking
xxx_xls_xslx_thing -> origin/totally_bogus
正如您在代码中看到的,关键是从git配置中提取数据。我只是使用sed来清除无关的数据。
#!/bin/sh
current_branch=$(git rev-parse --abbrev-ref HEAD)
remote=$(git config --get-regexp "branch\.$current_branch\.remote" | sed -e "s/^.* //")
remote_branch=$(git config --get-regexp "branch\.$current_branch\.merge" | \
sed -e "s/^.* //" -e "s/refs\/.*\///")
echo "$current_branch -> $remote/$remote_branch"
其他回答
我用这个别名
git config --global alias.track '!f() { ([ $# -eq 2 ] && ( echo "Setting tracking for branch " $1 " -> " $2;git branch --set-upstream $1 $2; ) || ( git for-each-ref --format="local: %(refname:short) <--sync--> remote: %(upstream:short)" refs/heads && echo --Remotes && git remote -v)); }; f'
then
git track
这是一个非常瓷的命令,如果你想用它来编写脚本,那就不好了:
git branch -vv # doubly verbose!
注意,在git 1.8.3中,上游分支显示为蓝色(参见“git中这个分支跟踪(如果有的话)是什么?”)
如果你想要干净的输出,请参阅Carl Suster的答案——它使用了一个瓷器命令,我不相信在我最初写这个答案的时候还存在这个命令,所以它更简洁一点,并且可以与配置为rebase的分支一起工作,而不仅仅是合并。
Git配置:get-regexp "branch\.$current_branch\.remote"
会告诉你被跟踪的遥控器的名字吗
Git配置:get-regexp "branch\.$current_branch\.merge"
将为您提供被跟踪的远程分支的名称。
您需要将$current_branch替换为当前分支的名称。你可以通过git rev-parse——abbrev-ref HEAD动态获取
下面的迷你脚本结合了这些内容。把它放在一个名为git-tracking的文件中,使其可执行,并确保它在您的路径中。
然后你可以说
$ git tracking
<current_branch_name>-><remote_repo_name>/<remote_branch_name>
注意,远程分支名称可以与本地分支名称不同(尽管通常不是)。例如:
$git tracking
xxx_xls_xslx_thing -> origin/totally_bogus
正如您在代码中看到的,关键是从git配置中提取数据。我只是使用sed来清除无关的数据。
#!/bin/sh
current_branch=$(git rev-parse --abbrev-ref HEAD)
remote=$(git config --get-regexp "branch\.$current_branch\.remote" | sed -e "s/^.* //")
remote_branch=$(git config --get-regexp "branch\.$current_branch\.merge" | \
sed -e "s/^.* //" -e "s/refs\/.*\///")
echo "$current_branch -> $remote/$remote_branch"
对于当前的分支,这里有两个不错的选择:
% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline
or
% git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
origin/mainline
答案也在这里,对一个稍微不同的问题,被(错误地)标记为重复。
kubi的另一个答案是看一下.git/config文件,它显示了本地存储库的配置:
油漆git -配置。