如何检查给定远程存储库上是否存在远程分支?

如果它存在于给定的远程存储库上,我需要为特定的分支进行子树合并。 问题是远程仓库没有在本地签出,所以我不能使用git branch -r 。 我所有的是一个远程地址,像这样的https://github.com/project-name/project-name.git 。 有没有办法只通过远程地址列出远程分支机构? 我找不到任何有用的:(

实际上,您也可以指定要search的分支的名称:

 $ git ls-remote --heads git@github.com:user/repo.git branch 

如果分支名称branch被发现,你会得到以下输出:

 b523c9000c4df1afbd8371324083fef218669108 refs/heads/branch 

否则,不会发送输出。

所以pipe道到wc会给你10

 $ git ls-remote --heads git@github.com:user/repo.git branch | wc -l 

或者,你可以在git ls-remote上设置--exit-code标志,如果找不到匹配的ref,将会返回退出代码2

 git ls-remote --heads https://github.com/rails/rails.git 5b3f7563ae1b4a7160fda7fe34240d40c5777dcd refs/heads/1-2-stable 81d828a14c82b882e31612431a56f830bdc1076f refs/heads/2-0-stable b5d759fd2848146f7ee7a4c1b1a4be39e2f1a2bc refs/heads/2-1-stable c6cb5a5ab00ac9e857e5b2757d2bce6a5ad14b32 refs/heads/2-2-stable e0774e47302a907319ed974ccf59b8b54d32bbde refs/heads/2-3-stable 13ad87971cc16ebc5c286b484821e2cb0fc3e3b1 refs/heads/3-0-stable 3df6c73f9edb3a99f0d51d827ef13a439f31743a refs/heads/3-1-stable f4db3d72ea564c77d5a689b850751ce510500585 refs/heads/compressor c5a809e29e9213102351def7e791c3a8a67d7371 refs/heads/deps_refactor 821e15e5f2d9ef2aa43918a16cbd00f40c221e95 refs/heads/encoding 8f57bf207ff4f28fa8da4544ebc573007b65439d refs/heads/master c796d695909c8632b4074b7af69a1ef46c68289a refs/heads/sass-cleanup afd7140b66e7cb32e1be58d9e44489e6bcbde0dc refs/heads/serializers 

另一种方式,你可以在当前文件夹中使用,如果它是一个git仓库运行

 git branch -a | egrep 'remotes/origin/${YOUR_BRANCH_NAME}$' 

你可以在Bashterminal做这样的事情。 只需用你想要执行的命令replace回声。

 if git ls-remote https://username:password@github.com/project-name/project-name.git | grep -sw "remote_branch_name" 2>&1>/dev/null; then echo "IT EXISTS..START MERGE" ; else echo "NOT FOUND" ; fi 

希望能帮助到你。

你也可以使用这个:

 git show-branch remotes/origin/<<remote-branch-name>> 

返回$的最新提交和值? 是0,否则返回“致命的:不好的sha1参考遥控器/原点/ <>”和$的价值? 是128

 $ git ls-remote --heads origin <branch> | wc -l 

大部分时间都在工作。

但是如果分支部分匹配如下则不起作用,

 $ git branch -a creative/dev qa/dev $ git ls-remote --heads origin dev | wc -l 2 

使用

 git ls-remote --heads origin <branch> | \ cut -d$'\t' -f2 | \ sed 's,refs/heads/,,' | \ grep ^<branch>$ | wc -l 

如果你想要一个可靠的方法。

如果你想在脚本中使用,并且不想将origin假定为默认的远程那么

 git ls-remote --heads $(git remote | head -1) "$branch" | \ cut -d$'\t' -f2 | \ sed 's,refs/heads/,,' | \ grep ^"$branch"$ | wc -l 

应该pipe用。

请注意, git branch -a | grep ... git branch -a | grep ...是不可靠的,因为它可能是一段时间以来的最后一次fetch运行。

你可以添加你有远程使用git remote add something https://github.com/project-name/project-name.git的远程存储库,然后做一个git remote show something以获得有关远程的所有信息。 这需要一个networking连接,对人类有用。

或者,做一个git fetch something 。 这将获取远程调用的所有分支,并将它们保存在本地存储库中。 您可以随意将它们合并到您当地的分支机构。 我build议这条路,因为如果你最终决定你必须合并,这是你需要做的。

OT:您使用“本地检出”表示您正在从集中版本控制系统的angular度来处理这个问题。 当你处理git时,这通常是一个死路一条。 它使用像“结账”等字样不同于旧系统。