2752

我的同事和我正在开发同一个存储库。我们已经将它分为两​​个分支,每个分支在技术上都针对不同的项目,但它们有相似之处,所以我们有时会希望masterbranch.

但是,我有branch. 我的同事怎么能专门拉那个分支?

存储库的 Agit clone似乎没有为他在本地创建分支,尽管我可以看到它们在我的推送之后仍然存在。

另外,当我最初制作分支时,我做了-b checkout. 这有很大的不同吗?

$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

$ git fetch origin discover
$ git checkout discover

这些是我运行的命令。但它肯定是行不通的。

我希望能够检查该分支,然后推送并提交来自各个协作者或工作站的分支更改

4

31 回答 31

3740

更新:使用 Git 开关

下面写的所有信息都是准确的,但git switch添加了一个新命令以简化工作。

如果daves_branch存在于远程存储库中,但不在您的本地分支上,您只需键入:

git switch daves_branch

由于您在本地没有分支,这将自动switch查看远程仓库。然后它还将自动设置远程分支跟踪。

请注意,如果daves_branch在本地不存在,您需要git fetch先在使用switch.


原帖

您需要创建一个跟踪远程分支的本地分支。以下命令将创建一个名为daves_branch的本地分支,跟踪远程分支origin/daves_branch。当您推送更改时,远程分支将被更新。

对于最新版本的 Git:

git checkout --track origin/daves_branch

--trackgit checkout -b [branch] [remotename]/[branch]在这种情况下是 [remotename] 是origin的简写,而 [branch] 是相同的两倍,在这种情况下是daves_branch

对于 Git 1.5.6.5,你需要这个:

git checkout --track -b daves_branch origin/daves_branch

对于 Git 1.7.2.3 及更高版本,这就足够了(它可能开始得更早,但这是我能很快找到的最早确认):

git checkout daves_branch

请注意,在最近的 Git 版本中,此命令不会创建本地分支,而是会将您置于“分离 HEAD”状态。如果您想要一个本地分支,请使用该--track选项。

完整的细节在这里:3.5 Git 分支 - 远程分支,跟踪分支

于 2012-03-02T17:45:18.030 回答
1124

fetch用过checkout...

git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>

...<rbranch>远程分支或源引用在哪里,并且是您要跟踪<lbranch>的尚不存在的本地分支或目标引用,并且您可能希望将其命名为与远程分支或源引用相同的名称。这在 的解释中的选项下进行了解释<refspec>

Git 非常聪明,如果我在远程分支的前几个字母之后按Tab ,它会自动完成第一个命令。也就是说,我什至不必命名本地分支,Git 会自动为我复制远程分支的名称。谢谢吉特!

同样正如这个类似的 Stack Overflow 帖子中的答案所示,如果您没有在 中命名本地分支fetch,您仍然可以在使用-b标志签出时创建它。也就是说, git fetch <remote> <branch>后面跟git checkout -b <branch> <remote>/<branch>我最初的回答完全一样。显然,如果你的存储库只有一个远程,那么你可以在git checkout <branch>之后做fetch,它会为你创建一个本地分支。例如,您刚刚克隆了一个存储库并想从远程签出其他分支。

我相信某些文档fetch可能是从pull. 特别是关于选项<refspec>的部分是相同的。但是,我不相信会永远这样,如果您将冒号的目的地侧留空,则应该什么也不做fetchmergefetch

注意:git fetch <remote> <refspec>是它的缩写,git fetch <remote> <refspec>:因此什么都不做,但与应该在本地复制远程git fetch <remote> <tag>的相同。git fetch <remote> <tag>:<tag><tag>

我想这仅在您想在本地复制远程分支时才有用,但不一定要立即检查出来。否则,我现在将使用接受的答案,因为它是单行的,所以在结帐说明的第一部分和稍后的选项部分的解释中详细解释了该答案。嗯……有点像单线,因为你还是得先跑。--trackgit fetch <remote>

仅供参考:(来源:目的地)的顺序解释了用于删除远程分支<refspecs>的奇怪的 pre Git 1.7 方法。也就是说,不向目标 refspec 推送任何内容。

于 2013-04-19T00:45:34.400 回答
459

如果您尝试“签出”一个新的远程分支(仅存在于远程,而不是本地),这就是您需要的:

git fetch origin
git checkout --track origin/<remote_branch_name>

这假设您要从origin获取。如果不是,请将origin替换为您的远程名称。

于 2013-05-17T12:14:59.177 回答
148

要检查远程而不是本地存在的 myBranch - 这对我有用:

git fetch --all
git checkout myBranch

我收到了这条消息:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
于 2013-11-12T03:36:22.180 回答
94

在本地获取分支:

git fetch origin <branchName>

移动到那个分支:

git checkout <branchName>
于 2017-10-06T09:26:16.240 回答
82

使用git branch -a(本地和远程分支)或git branch -r(仅远程分支)查看所有远程及其分支。然后,您可以git checkout -t remotes/repo/branch对远程执行操作并创建本地分支。

还有一个git-ls-remote命令可以查看该遥控器的所有参考和标签。

于 2012-03-02T17:16:57.310 回答
53

标题和问题混淆了:

  • Git 获取远程分支
  • 我的同事怎么能专门拉那个分支。

如果问题是,我怎样才能使用远程分支,或者我怎样才能 Git 签出远程分支?,一个更简单的解决方案是:

使用 Git (>= 1.6.6),您可以使用:

git checkout <branch_name>

如果<branch_name>未找到本地,但在一个具有匹配名称的远程中确实存在跟踪分支,则将其视为等效于:

git checkout -b <branch_name> --track <remote>/<branch_name>

请参阅 Git 结帐文档

给你的朋友:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
于 2014-03-31T10:48:17.103 回答
42

要获取远程存在的分支,最简单的方法是:

git fetch origin branchName
git checkout branchName

您可以通过以下方式查看它是否已存在于远程:

git branch -r

这会将远程分支获取到您的本地并自动跟踪远程分支。

于 2019-04-11T04:51:49.943 回答
36

采用:

git checkout -b serverfix origin/serverfix

这是一个足够常见的操作,Git 提供了--track简写:

git checkout --track origin/serverfix

事实上,这很常见,甚至还有一条捷径。如果您尝试签出的分支名称 (a) 不存在并且 (b) 仅与一个遥控器上的名称完全匹配,Git 将为您创建一个跟踪分支:

git checkout serverfix

要使用与远程分支不同的名称设置本地分支,您可以轻松地使用具有不同本地分支名称的第一个版本:

git checkout -b sf origin/serverfix

现在,您的本地分支sf将自动从origin/serverfix.

资料来源:Pro Git,第 2 版,由 Scott Chacon 和 Ben Straub 编写(为便于阅读而删减)

于 2016-03-18T00:21:19.290 回答
30

使用这个简单的命令:

git checkout -b 'your_branch' origin/'remote branch'
于 2017-05-18T09:38:19.107 回答
28

[快速回答]

有很多选择,我最喜欢的是:

- 备选方案 1:

git fetch --all
git checkout YourBranch

使用远程存在但不在本地的分支使用此替代方法。

- 备选方案 2:

git checkout -b 'YourBranch' origin/'YourRemote'

可能,这是最简单的方法。

于 2019-10-31T12:17:03.227 回答
17

帮助我的是

1)查看所有可用的远程分支(例如'remote-branch-name')

git branch -r

2) 使用远程分支名称创建本地分支

git fetch && git checkout 'remote-branch-name'
于 2018-09-17T02:16:14.797 回答
16
git fetch

git branch -r

git checkout <branch_name>
于 2013-12-04T20:53:33.833 回答
15

您也可以一次性获取并签出远程分支:

git fetch && git checkout the-branch-name
于 2015-03-25T06:43:02.823 回答
14

我打了

git checkout <branch_name>

并得到

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
于 2013-10-17T00:07:26.057 回答
13

有时,您会被要求不要摆弄 master 分支,而只使用远程分支(正如我被要求的那样)。所以你只需要远程分支。

因此,要单独克隆远程分支(没有主分支),请执行此操作

git clone url --branch remote_branch_name

其中,remote_branch_name 是远程分支的名称

例如,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

这将确保您使用远程分支的名称将远程分支克隆到本地分支。

现在,如果您提交代码并推送,代码将单独提交到该分支。

于 2015-02-06T05:11:05.837 回答
12

步骤如下;

  1. git fetch origin或者git fetch --all,这会将所有远程分支获取到您的本地,然后这是您可以处理的第二个选项。

  2. git checkout --track origin/<The_remote_branch you want to switch over>

然后在这个分支上工作,你可以通过输入来验证你是否在那个分支上

git branch

它显示您当前所在的分支。

于 2013-12-26T10:09:11.903 回答
10

假设您的遥控器是 git@xyz.git 并且您想要它的 random_branch 分支。该过程应如下所示:

  1. 首先通过以下方式检查您的遥控器列表

    git remote -v

  2. 如果您在上述命令的输出中没有 git@xyz.git 远程,您可以添加它

    git remote add xyz git@xyz.git

  3. 现在您可以通过以下方式获取该遥控器的内容

    git fetch xyz

  4. 现在通过

    git checkout -b my_copy_random_branch xyz/random_branch

  5. 检查分支列表

    git branch -a

本地分支 my_copy_random_branch 将跟踪远程的 random_branch 分支。

于 2018-03-06T16:59:13.580 回答
9

只需尝试:

git pull origin your_branch_name
于 2017-12-12T19:47:59.433 回答
9

如果您有一个被克隆的存储库,--depth 1那么列出的许多命令将不起作用。例如,请参见此处

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

在这种情况下,我会重新克隆存储库,但也许还有其他技术,例如git shallow clone (clone --depth) 错过了远程分支

于 2018-01-24T21:21:03.543 回答
9

如果您想获取所有远程分支,请输入:

git fetch --all
于 2019-06-12T09:37:25.673 回答
8

git fetch --all & git checkout <branch name>

于 2017-11-20T00:42:13.593 回答
7

git fetch && git checkout <your friend's branch name>应该做的伎俩

于 2018-04-25T11:37:50.700 回答
7

我想给你一个命令来获取所有远程分支到你的本地并切换到你想要的新创建的本地分支:

git fetch && git checkout discover

运行上述命令后,您将收到以下消息:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from origin.

第一行说明切换到 新分支- 为什么是新分支?它已经在远程了!

但实际上你也必须在本地创建它。分支取自远程索引并在本地为您创建。

discover是一个从存储库的远程分支创建的新分支discover

但是第二行提供了比第一行更多的信息,它告诉我们:

我们的分支设置为跟踪具有相同名称的远程分支。

虽然git fetch 将所有分支提取到本地。但是如果你追着git branch它跑,你只会master在本地看到分支。为什么

因为对于远程中的每个分支,您也必须在本地创建它,以便git checkout <branchname>像我们在上面的示例中所做的那样跟踪它。

运行git checkout命令后你可以运行git branch,现在你可以看到两个分支:

  1. 掌握和 2. 在您的本地列表中发现。
于 2019-03-15T14:05:34.343 回答
4

检查您的文件,特别是在获取该遥控器.git/config时存在哪些跟踪。

[remote "randomRemote"]
    url = git@github.com:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

如果它heads/*指向randomRemote/*,当您运行 时git fetch randomRemote,它将获取所有分支。

然后你可以检查那个分支。

除此以外,

  1. 您需要使用此方法将远程分支添加到跟踪中。运行后检查你的.git/config。你会明白的。

    git remote set-branches --add randomRemote randomBranch
    
  2. 运行git fetch randomRemote。这将获取远程分支。

  3. 现在您可以运行git checkout randomBranch.

于 2017-02-01T14:29:24.920 回答
3

如果您已经像这样知道您的远程分支......

git remote
=> One
=> Two

并且您知道要结帐的分支名称,例如br1.2.3.4,然后执行

git fetch One
=> returns all meta data of remote, that is, the branch name in question.

剩下的就是结帐分支

git checkout br.1.2.3.4

然后制作任何新的分支。

于 2015-06-26T17:51:26.957 回答
2

git branch <name> --track origin/<name>

于 2018-03-11T18:02:34.110 回答
1

你使用'git pull'来保持你的分支分开。我将使用实际的存储库和分支名称来提供帮助,因为“lbranch”和“rbranch”很难破译。

让我们使用:

  • myteam.unfuddle.com = 远程 Git 服务器
  • tlc = 解开存储库所在的项目帐户
  • daves_branch = 远程分支名称

    无论有多少分支,您或任何同事都可以运行此命令以仅拉取您的分支:

    git init
    git pull git@myteam.unfuddle.com:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    
  • 于 2013-05-22T21:10:02.873 回答
    1

    一个简单的命令git checkout remote_branch_name将帮助您创建一个本地分支,其中包含远程分支中的所有更改。

    于 2018-01-19T12:34:41.167 回答
    1

    如果您使用git clone <repo_url> -b <branch>(仅克隆某些分支)下载存储库,则应修改该<repo_name>/.git/config文件。替换或修改引用该[remote "origin"]部分的 fetch 目标的行,以让命令git fetch --all发现所有分支:

    [remote "origin"]
            url = <repo_git_url>
            fetch = +refs/heads/master:refs/remotes/origin/master
    

    请务必将 fetch 参数点设置为/heads/master.

    小心,git fetch --all因为这将获取所有内容,因此可能需要很长时间。

    于 2020-10-01T10:20:19.750 回答
    -1
    git checkout -b branch_name
    git pull remote_name branch_name
    
    于 2019-01-22T10:43:08.963 回答