git - 在 git 中,如何 check out 远程仓库的远程分支?

标签 git

我有一个从裸远程存储库克隆的本地存储库。以下命令列出远程存储库的所有分支。

$ git ls-remote <remote>

74bd3eb190edb39db04f6c0c4dbbb9e1e96bc6db    refs/remotes/test
85de54d6ae813c624b9623983e6b0a4948dae0fe    refs/remotes/trunk

我想检查并跟踪那个远程的远程分支 trunk。我该怎么做?

请注意,这与 checkout 远程存储库的本地分支不同。 这就是远程存储库的样子。

$ git branch -a

master
remotes/test
remotes/trunk

在运行 git fetch 以获取所有远程存储库的分支后,我在本地存储库中得到了这个输出。

$ git branch -r

repo/HEAD -> repo/master
repo/master

最佳答案

您可以从任何远程获取任何引用(只要服务器愿意将其提供给您)。在外部获取 refs 的关键 refs/heads/是提供以 refs/ 开头的完整引用路径.如果需要,您甚至可以从未配置为远程的存储库中提取数据(git fetch 可以采用 URL 而不是远程名称)。

默认情况下,配置的远程只会从远程存储库的 refs/heads/ 中获取命名空间,因此他们不会在 refs/remotes/ 中获取任何内容.但是,您可以使用像 refs/remotes/trunk 这样的完整引用来引用其中的引用。 ( remotes/trunk 也可能有效,但也可能不明确)。

如果获取的 refspec 没有指定目标 ref,它将存储在特殊的 FETCH_HEAD ref 中。


获取存储库的 refs/remote/trunk进入 FETCH_HEAD 并将其作为分离的 HEAD 检查出来:

git fetch remote-name-or-url refs/remotes/trunk &&
git checkout FETCH_HEAD

相同,但创建一个命名的本地分支而不是使用分离的 HEAD:

git fetch remote-name-or-url refs/remotes/trunk &&
git checkout -b trunk-from-remote FETCH_HEAD

相同,但直接进入本地分支:

git fetch remote-name-or-url refs/remotes/trunk:trunk-from-remote &&
git checkout trunk-from-remote

如果您正在使用配置好的 Remote ,您可以重写它的 remote.<remote-name>.fetch配置并添加一个额外的条目以自动从 refs/heads/ 中获取和 refs/remotes/ .

# fetch branchs of remote into remote-name/heads/*
git config remote.remote-name.fetch '+refs/heads/*:refs/remotes/remote-name/heads/*' &&
# fetch remotes of remote into remote-name/remotes/*
git config --add remote.remote-name.fetch '+refs/remotes/*:refs/remotes/remote-name/remotes/*'

为避免可能发生的冲突,上述示例将 fetch 配置为将 refs 存储到不相交的命名空间(…/heads/…/remotes/)中。如果你愿意,你可以选择不同的名字。如果你确定不会有冲突,你甚至可以把它们都直接塞到refs/remotes/remote-name/下。 .

关于git - 在 git 中,如何 check out 远程仓库的远程分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3036817/

相关文章:

git - 远程服务器上的 git 存储库中的代码安全吗?如何保证它的安全?

git - 从 git commit 中删除大文件

Git 状态总结

git - rebase - 如果 rerere 解决了所有冲突,则自动继续

git - 如何获取Git命令的运行时间?

javascript - 在每次 Git 推送上测试 JavaScript 代码(针对 Web 前端)的最简单方法

在 CentOS 上更新到 OpenSSh 5.3 后的 Git 访问问题

git - 硬重置 Git 存储库后回滚到未提交的更改

git - 在每个更改的行中突出显示更改的行和更改的字节

regex - 使用正则表达式过滤差异