如何获取远程分支而不进行“检出”操作?

16

我正在处理一个名为 "branch-A" 的分支,并使用命令 git branch 查看本地只有这个分支。

如果我使用 git branch -a ,我可以看到 "remotes / origin / branch-B" 的远程副本。

我想做的是将 branch-B 拉到本地,但我不想实际检出它......我的意思是,我可以这样做,然后检出我的其他分支回去,但由于我要在许多存储库中进行此操作,所以这样稍微有点麻烦。

我在考虑某种方式的获取操作?但我想不出该如何构造该命令。这可能吗?

所以我有:

user@pc> git branch
* branch-A
  master

user@pc> git branch -a
* branch-A
  remotes/origin/branch-B
  remotes/origin/branch-A
  remotes/origin/master

我希望能够获得:

user@pc> git branch
* branch-A
  branch-B
  master

1
你几乎已经说出来了:git fetch - Willem Van Onsem
1
git fetch by itself will not do what he's looking to do. It will update his remote refs but not actually create local tracking branches unless you specifically do a git checkout -b <branchName> - g19fanatic
@WillemVanOnsem 是的,光使用git fetch并不会有什么实际效果(除了已跟踪分支,就像g19所提到的那样)。 - code_fodder
@g19fanatic 我知道这部分,但我想尝试避免checkout :( - code_fodder
5个回答

26

是的,这正是它所说的:))我有点希望 git fetch <remote> <srcBranch> 可以做到并默认使用相同名称的本地分支名称,但似乎不起作用...好吧,重复名称并不需要太大的努力 - 但我真的不太理解 ":" 语法,在 git 中不太常用(至少我到目前为止没有)。很好的答案 :) - code_fodder
1
我认为git-completion.bash可以做这个,并且还有更多有用的功能。 https://github.com/git/git/blob/master/contrib/completion/git-completion.bash - rome

1
你可以运行一个脚本来创建以所有远程分支名称命名的新本地分支。
$ git fetch
$ for branch in `git branch -r | sed 's@origin/@ @'`;do `git branch  $branch origin/$branch`;done

git branch -r 显示所有远程分支
sed 's@origin/@ @' 从分支名称的开头分离origin/
git branch $branch origin/$branch 创建一个新分支,包含 origin/branch 的历史记录

现在查看所有本地分支

$ git branch

呵呵,这很聪明。我对“git branch <branchname> origin/<branchname>”部分比较感兴趣,这种特定的 git 分支用法对我来说是新的。这相当于我标记为“答案”的那个方法…… 对于这一部分点个赞。 - code_fodder

1

我认为“将分支B本地化”这个概念有些模糊。

如果你看到origin/branch-B,那么你已经在本地拥有它了。提交、包含的树和文件都已经在你的本地仓库中了。唯一你没有的是一个本地分支(branch-B)来追踪远程分支(origin/branch-B)。

如果你不想检出branch-B,那么创建本地分支的理由并不多。你可以用远程分支引用来完成本地分支所能做的几乎所有操作,例如:

git merge origin/branch_B

但是如果你想要一个,你可以创建它:
git branch --set-upstream branch_B origin/branch_B

这里提出了很好的观点,谢谢解释 - 这有所帮助 :) 最终我开始使用完整路径“remotes/origin/...”,以此方式实现了我想要的目标。但出于简便起见,我仍然想知道如何做我所要求的事情。无论如何+1。 - code_fodder

0
git branch branch-B origin/branch-B

在执行fetch或pull之后,您也可以更改本地名称;但是,我想不到有哪种情况下分支只需要保留而不是检出,除非您打算从此副本克隆。像git log origin/branch-B..branch-Agit merge origin/branch-B这样的东西完全可以正常工作。您也可以检出,但仅处于分离的HEAD状态。


-1
你要查找的命令是 git fetch,并使用选项 --all 来获取所有远程分支。

哦嗯……这似乎不是我想要的,我的意思是我确定它会更新所有分支的信息,但我没有获得本地跟踪分支的结果 :( - code_fodder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接