如何在没有 "checking it out" 的情况下获取远程分支

How do you fetch a remote branch without "checking it out"

我正在一个分支 "branch-A" 上工作并使用命令 git branch 我可以看到它是本地唯一的分支。

如果我使用 git branch -a 我可以看到 "remotes/origin/branch-B"

的远程副本

我想做的是将分支 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

您正在搜索的命令是 git fetch 并使用选项 --all 来获取所有远程分支。

您可以运行一个脚本来使用所有远程分支的名称创建新的本地分支。

$ git fetch
$ for branch in `git branch -r | sed 's@origin/@ @'`;do `git branch  $branch origin/$branch`;done

git branch -r 显示所有远程分支
sed 's@origin/@ @' split the origin/ from beginning of branch name
git branch $branch origin/$branch 创建一个历史为 origin/branch

的新分支

现在查看所有本地分支机构

$ git branch

你可以做到这一点,一条线很简单。

git fetch <remote> <srcBranch>:<destBranch>

这将避免检出远程分支。

查看此问题了解更多信息:

Merge, update, and pull Git branches without using checkouts

我认为 "bring branch-B locally" 的含义有些歧义。

如果您看到 origin/branch-B,那么您已经在本地安装了它。提交、它们包含的树、它们包含的文件……所有这些都已经在您的本地存储库中。你唯一没有的是本地分支(branch-B)跟踪远程分支(origin/branch-B)。

如果您不想检查 branch-B,则没有太多理由创建本地分支。几乎任何你可以用本地分支做的事情,你都可以用远程分支引用来做。例如:

git merge origin/branch_B

但是如果你想要一个,你可以创建它:

git branch --set-upstream branch_B origin/branch_B