【问题标题】:How to bring the git remote branch references local如何将 git 远程分支引用带到本地
【发布时间】:2013-09-03 12:30:39
【问题描述】:

创建一个新的 git 分支:

git checkout -b test

并将其推送到原点:

git push origin -u 测试

并列出我现在得到的所有分支:

  master
* test
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/test

现在,在另一台机器上,我想执行一个命令来获取远程分支引用。我该怎么做?

我想要输出:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/test

并且该命令不知道新分支的名称。

我试过了:git pullgit pull --allgit fetchgit fetch --all。还有什么?

编辑:我需要一个命令告诉我:

* [new branch]      test       -> origin/test

如果不先检查分支,这可能吗?我也不想删除我的 repo 并再次克隆它。

【问题讨论】:

  • 所以您想查看已创建的分支,但不知道其名称?
  • 不,我想获取/列出在我的远程origin上创建的所有分支

标签: git branch git-branch


【解决方案1】:

在另一台机器上我想执行一个命令来获取远程分支引用。

您可以启动一个空的 repo,添加一个来源并执行 ls-remote(就像 in the comments of your other question 所做的那样):

git init newRepo
cd newRepo
git remote add origin /url/remote/repo
git ls-remote origin

这使您无需在本地克隆/获取任何内容即可查看远程仓库的分支。
由于您在一个空的仓库中,因此您可以决定要获取什么。


正如jthill 提到的in the commentsgit ls-remote 部分不需要从 git 存储库运行。
例如,考虑:

cd / # to illustrate that you can be anywhere
git ls-remote git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 'refs/heads/*'

如果您已经有一个克隆的 repo,并且不介意下载 delta,那么 git fetch 应该可以工作,前提是它的 refspec 设置为获取所有分支。
(再次,如您的另一个问题“git checkout new remote branch when cloning with depth 1 option”所示)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"

【讨论】:

  • git ls-remote 可以在任何地方工作,您不需要初始化一次性。 ( cd /; git ls-remote git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 'refs/heads/*'; )
  • @jthill 是的。我已将您的评论包含在答案中以提高知名度。
【解决方案2】:

列出本地存储库的远程分支,在本例中是

$ git branch --remote |grep origin

在您的情况下,要更新与另一个名为 origin 的远程存储库相对应的存储库的远程引用,它是

$ git fetch origin

这将创建一个新的远程分支origin/test,如果它是在远程仓库上创建的。然后,您可以将其设为本地分支并使用

进行检查
git checkout --track origin/test

【讨论】:

  • 这只会列出它们,但不会更新本地参考。即git branch -a 未列出:remotes/origin/test
  • 我想更新本地克隆中的引用,而不是列出远程分支
  • @GabrielPetrovay 试试git checkout --track origin/test 它必须有效。
  • 我不知道 test 这个名字。我想获取所有远程分支引用。
  • 我假设您知道原产地的名称。然后:git for-each-ref --shell --format="git checkout --track %(refname:short)" refs/remotes/origin(输出是可以提供给 sh 的命令)
【解决方案3】:

如果你已经有一个 git repo 并且只想从远程跟踪一个新分支,你可以使用:

git checkout --track origin/test

如果你想克隆一个特定的分支:

git clone -b test <remote location>

【讨论】:

  • 不知道新分支的名字,想更新所有的refs
  • @GabrielPetrovay 试试 CharlesB 回答即git ls-remote --heads origin
  • 为什么要否决任何错误?请提及。我用了这么久没有任何问题。这就是我们信任某些事物的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2016-04-12
  • 2018-12-20
相关资源
最近更新 更多