如何找出本地分支正在跟踪哪个远程分支?
我需要解析git config
输出,还是有一个命令可以帮我做到这一点?
#1楼
我用这个别名
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
请注意,该脚本还可以用于设置跟踪。
更多出色的别名, 请访问https://github.com/orefalo/bash-profiles
#2楼
这是一个为您提供所有跟踪分支(配置为“拉”)的命令,请参见:
$ git branch -vv
main aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit
您必须仔细阅读SHA和所有长时间包装的提交消息,但是键入起来很快,我在第三列中将跟踪分支垂直对齐。
如果您需要每个分支上的'pull'和'push'配置信息,请参阅git remote show origin
上的其他答案。
更新资料
从git版本1.8.5开始,您可以显示带有git status
和git status -sb
的上游分支
#3楼
我使用EasyGit(又名“ eg”)作为Git顶部(或侧面)的超轻量级包装。 EasyGit有一个“ info”子命令,可为您提供各种超级有用的信息,包括当前分支,远程跟踪分支。 下面是一个示例(当前分支名称为“ foo”):
pknotz@s883422: (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
#4楼
您可以使用git checkout
,即“签出当前分支”。 这是一个没有副作用的操作,可以显示当前分支的跟踪信息(如果存在)。
$ git checkout
Your branch is up-to-date with 'origin/master'.
#5楼
另一种简单的方法是使用
git repo中的cat .git/config
这将列出本地分支机构的详细信息
#6楼
以下命令将远程源当前派生引用
git remote -v
要添加远程路径,
git remote add origin path_name
#7楼
如果您只想知道它是否存在,则可以使用另一种方法(感谢osse):
if git rev-parse @{u} > /dev/null 2>&1
then
printf "has an upstream\n"
else
printf "has no upstream\n"
fi
#8楼
另一种方式
git status -b --porcelain
这会给你
## BRANCH(...REMOTE)
modified and untracked files
#9楼
git branch -r -vv
将列出所有分支,包括远程。
#10楼
本地分支机构及其远程站点。
git branch -vv
所有分支机构和跟踪遥控器。
git branch -a -vv
查看本地分支在哪里显式配置用于推和拉。
git remote show {remote_name}
#11楼
如果您使用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
}
#12楼
这将向您显示您所在的分支:
$ 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
#13楼
.gitconfig
改善这个答案 ,我.gitconfig
了以下.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
#14楼
如果您想找到任何分支的上游(而不是您所在的分支),请对@ cdunn2001的答案进行一下修改:
git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}
这将为您提供名为YOUR_LOCAL_BRANCH_NAME
的本地分支的远程分支名称。
#15楼
列出本地和远程分支:
$ git branch -ra
输出:
feature/feature1
feature/feature2
hotfix/hotfix1
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
#16楼
您可以尝试以下方法:
git remote show origin | grep“分支名称”
branch_name需要替换为ur分支
#17楼
git branch -vv | grep 'BRANCH_NAME' | awk '{print $4}'
git branch -vv
:这部分将显示所有本地分支及其上游分支。
grep 'BRANCH_NAME'
:它将从分支列表中过滤当前分支。
awk '{print $4}'
:它将仅显示上游分支名称
#18楼
我不知道这是否可以解析git config的输出,但这将确定master跟踪的远程URL:
$ git config remote.$(git config branch.master.remote).url
#19楼
更新:嗯,自我发布此消息已有好几年了! 为了将HEAD与上游进行比较,我现在使用@{u}
,它是引用上游跟踪分支的HEAD的快捷方式。 (请参阅https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmastermasterupstreamememuem )。
原始答案:我也遇到了这个问题。 我经常在单个存储库中使用多个远程服务器,很容易忘记当前分支跟踪的是哪个远程服务器。 有时很容易知道这一点,例如,当您想通过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
#20楼
我认为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)
#21楼
两种选择:
% 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