git获取远程分支

Git fetch remote branch

我的同事和我在同一个存储库中工作,我们在技术上将它分为两个分支,每个分支用于不同的项目,但它们有相似之处,因此我们有时会希望从branch返回到*master

不过,我有一台branch。我的问题是,我的同事怎么能专门拉那个分支?

回购协议中的git clone似乎并没有为他在本地建立分支机构,尽管我可以看到,在我的努力下,这些分支机构仍然安然无恙。

另外,当我最初创建分支时,我做了-b checkout。不知道这有什么区别吗?

1
2
3
4
5
6
7
8
$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

$ git fetch origin discover
$ git checkout discover

这些是我运行的命令。但它肯定不起作用。

我希望能够签出该分支,然后只推送和提交来自不同合作者或工作站的分支更改。

  • Git签出远程分支的可能副本
  • 我用:git fetch --all,然后查看所有的分支机构:git branch,然后检查分支机构:git checkout nameofnewbranch
  • 查看您的问题,网址为https://stackoverflow.com/questions/1072261/push and pull br‌&8203;anches in git/477803‌&8203;74 47780374
  • 如何签出远程git分支的可能副本?
  • git fetch origin discover:discover && git checkout discover


您需要创建一个跟踪远程分支的本地分支。下面的命令将创建一个名为Daves_branch的本地分支,跟踪远程分支来源/Daves_branch。推送更改时,远程分支将更新。

对于Git的最新版本:

1
git checkout --track origin/daves_branch

--trackgit checkout -b [branch] [remotename]/[branch]的简写,其中[远程名称]在本例中是源,而[分支]是相同的两倍,在本例中是Daves_分支。

对于git 1.5.6.5,您需要:

1
git checkout --track -b daves_branch origin/daves_branch

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

1
git checkout daves_branch

请注意,对于最新的git版本,此命令不会创建本地分支,并且会将您置于"分离的头"状态。如果您需要本地分支,请使用--track选项。详细信息如下:http://git scm.com/book/en/v2/git分支远程分支跟踪分支

  • 是否需要进行git fetch发现?
  • 只有在远程系统发生了变化时才需要Git Fetch,例如,如果Dave已将分支推到主回购,而您的回购还没有对其进行任何引用,则需要Git Fetch。
  • 在这个例子中是这样的。
  • "git fetch"以确保使用远程引用更新您的repo,而"git checkout--跟踪源站/发现"就足够了。然后您可以提交到该分支,并使用"git push"将远程设备与您的更改同步。
  • 我尝试了这个方法,得到了"致命的:git签出:更新路径与切换分支不兼容"。您是否打算签出"上游/开发",但不能将其解析为提交?"我做错什么了吗?
  • @尼尔·巴恩韦尔如马格纳斯所说,做一个江户
  • @Neilbarnwell我需要做一个git fetch --all(它可以取出所有的遥控器)来让它工作。
  • @Neilbarnwell读了这个答案,如何修复它
  • @Neilbarnwell这对我很有用:git remote show origingit remote update(解释见stackoverflow.com/questions/945654/…)
  • EDOCX1?5????
  • 看起来Git 1.5.6.5需要这样做:Git checkout--track-b origin/Daves_branch
  • 我碰到了江户十一〔六〕号。对我来说,解决办法是运行git checkout --track remotes/origin/
  • 谢谢@charlie,在git 1.9上,我也不得不做一个-b
  • 这给我造成了混乱,它创建了一个名为origin/的本地分支,它现在对远程分支origin/不明确,我不知道如何摆脱疯狂的本地分支!
  • 是的,我不会使用这个命令。这可能是因为我的配置中有多个遥控器,但我现在和"艾伦·摩尔"在同一条船上。我刚刚删除了本地回购,然后又从Github克隆了它…但在我这样做之前,我很难撤销上面的命令。即使在$ git branch -d origin/mybranch之后…
  • 您需要显式地添加本地分支名称,否则git会创建一个具有完整分支路径的新本地分支,如上面所述的@alanmore和@derekmx271:git checkout -b --track daves_branch origin/daves_branch
  • @Mikescott git checkout --track -b daves_branch origin/daves_branch,否则它告诉我——track不是有效的分支。
  • 如果分支不在本地,则需要先执行git fetch
  • @关于"You need to create a local branch that tracks a remote branch"。本地分行的名称是否重要,还是应该与远程回购的名称匹配?


我用过fetch,后面是checkout

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

…其中,是远程分支或源引用,是您要跟踪的尚未存在的本地分支或目标引用,您可能希望将其命名为远程分支或源引用。这在解释中的选项下进行了解释。

Git非常聪明,如果我在远程分支的前几个字母后加制表符,它就会自动完成第一个命令。我甚至不必给本地分支命名,Git会自动为我复制远程分支的名称。谢谢!

同样,正如本文中的答案所示,如果您不命名fetch中的本地分支,您仍然可以在使用-b标志签出时创建它。例如:git fetch ,后面是git checkout -b /,和我最初的回答完全一样。显然,如果您的回购只有一个远程,那么您只需在fetch之后执行git checkout ,它将为您创建一个本地分支。你刚刚克隆了一个repo,想从远程系统中检出更多的分支。

我认为,一些有关fetch的文件可能是从pull逐字复制的。特别是期权中关于的部分是相同的。但是,我不认为fetch会永远是merge,所以如果你离开结肠的终点端,空的fetch应该什么都不做。

注:git fetch git fetch :的缩写,因此不起作用,但git fetch git fetch :相同,后者应在本地复制远程

我想这只在您想在本地复制一个远程分支时有用,但不一定要立即检查它。否则,我现在将使用上面接受的答案,在结帐说明的第一部分和随后的选项部分中,在--track的解释下详细解释,因为它是一个1行程序。好。。。有点像一行程序,因为您仍然需要首先运行git fetch

仅供参考:EDOCX1的顺序(来源:目的地)解释了删除远程分支的奇怪的pre-git-1.7方法。IE:不将任何内容推入目的地参考规范。

  • 假设设置了Git自动完成。code-worrier.com/blog/autocomplete-git
  • 是的,对于要自动完成的git命令,必须启用git-completion.bash。源文件的顶部包含"使用这些例程"的说明。您也可能希望使用git提示(源代码中包含的方向)。注:在Macintosh上,~/.bashrc~/.bash-profile。在Macintosh上安装Git时,不包括这两个文件,并且不更改$HOME中的.bash-profile文件来添加这些命令。
  • 这对我将远程代码导入本地分支很有用。但是它没有让我的本地分支跟踪远程分支。
  • 并批准转给你想在git branch的分支机构。
  • 由于某种原因,git fetch remote branch根本没有为我增加一个分支头,尽管所有的引用都被取出来了,所以当我试图按照公认的答案中的步骤操作时,我得到了pathspec did not match any file(s) known to git.的错误,但是rbranch:lbranch的方法起作用了。有趣的是,它还获取了所有以相同前缀开头的标记,就像它是一个通配符(rbranch*)。
  • nit:git不做自动完成,而是bash shell做的。
  • 这真的对我有帮助——我只是想取一个我的同事添加到源站的远程分支。在我看来,很多文档都缺少关于添加新的本地分支机构名称的关键部分,您希望将获取指向-:。非常感谢你。
  • fwiw,我认为这个答案和公认的答案之间的区别是,这个答案告诉你执行fetch命令。不过,这个公认的答案是有道理的,因为OP注意到他已经做了回信。这至少是我遇到的问题。
  • 这非常适合于跟踪以前分叉的repo的远程分支(例如,跟踪您所贡献的OSS项目的dev分支)。谢谢!
  • 这种特定的方法还有一个额外的好处,那就是只检索所需的分支(而不是所有的远程分支引用),这对于我在与一个相当大的repo接口的慢速连接上很重要。


如果您试图"签出"一个新的远程分支(它只存在于远程,但不存在于本地),那么您需要:

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

这假定您要从源站提取。如果没有,请用远程名称替换源站。

  • "拉"源代码是一种令人困惑的语言,最好将上面的注释改为"获取"源代码。pull是一个执行fetch和merge的命令,它肯定会混淆新用户(包括我)。
  • 为我工作,我没有找到正确的远程分支,所以接受的回答总是以一个令人困惑的消息失败。+ 1


要签出远程存在而非本地存在的MyBranch-这对我很有用:

1
2
git fetch --all
git checkout myBranch

我收到这个消息:

1
2
Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

  • 换言之,你不必写-t
  • 我想这个答案有错误。我最初是在没有-t的情况下指挥的,后来得到了You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.,因为当地没有同名的分支机构。我得和-t重新跑去修理。
  • 这对我来说很好——我的同事添加了一个新的远程分支,我想将其添加到本地回购协议中。我一直在找,但没有看到新的分支出现在本地。没有意识到我可以运行checkout来创建它。谢谢!
  • 取决于Git版本。最新版本,如这里其他地方所说,只需要git checkout。小心同名的本地分支和远程分支-它们会把事情搞砸的。


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

还有一个git ls remote命令来查看该远程的所有引用和标记。

  • git checkout remotes/repo/branch使git checkout寻找路径规范,而不是远程repo。
  • 是的,甚至可以在远程回购上签出分支吗?很明显(或者可能不是很明显),遥控器是先取出来的,这样你就可以在本地使用了。Git图书中有一个很好的部分:git-scm.com/book/en/git-branching-remote-branches


标题和问题混淆了:

  • git获取远程分支
  • 我的同事怎么能专门拉那个分支呢?

如果问题是如何让远程分支使用或如何Git签出远程分支,则更简单的解决方案是:

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

1
git checkout <branch_name>

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

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

请参阅文档了解Git签出

对于您的朋友:

1
2
3
$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

  • 谢谢你,基劳姆!我刚刚用这个命令写了一篇关于它的文章来描述我的确切情况:leniel.net/2014/05/&hellip;
  • <!--git checkout>>按预期工作,谢谢Guillaume!


1
git checkout -b serverfix origin/serverfix

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

1
git checkout --track origin/serverfix

事实上,这是很常见的,甚至有一个快捷方式的快捷方式。如果您尝试签出的分支名称(a)不存在,(b)只与一个远程服务器上的名称完全匹配,Git将为您创建跟踪分支:

1
git checkout serverfix

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

1
git checkout -b sf origin/serverfix

现在,本地分支sf将自动从origin/serverfix中提取。

资料来源:Pro Git第二版,作者:Scott Chacon和Ben Straub(为可读性而裁剪)

  • 那些速记员是个教训


使用此简单命令:

1
git checkout -b 'your_branch' origin/'remote branch'

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

1
git fetch && git checkout the-branch-name


最简单的方法,至少对我来说:

1
git fetch origin <branchName>

  • 不带其他分支
  • @这个问题说"获取一个远程分支",而不是所有分支。对于以下内容,stackoverflow.com/questions/10312521/&hellip;可能会对您有所帮助。
  • 使用此fetch命令后,本地计算机上将提供所需的分支。本分行结帐需使用git checkout -b 'your_branch' origin/'remote branch'


1
2
3
4
5
git fetch

git branch -r

git checkout <branch_name>

我打字

1
git checkout <branch_name>

并且得到

1
2
Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'

  • 来自git checkout文档:如果未找到,但在一个远程中确实存在具有匹配名称的跟踪分支,则将其视为等同于:git checkout -b --track /


帮助我的是

1)查看所有可用的远程分支(例如"远程分支名称")。

1
git branch -r

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

1
git fetch && git checkout 'remote-branch-name'

  • 在没有任何其他参数的情况下运行命令git push会发生什么?名为remote-branch-name的本地分支自动与名为origin/remote-branch-name的远程分支关联(跟踪到该分支)。还是需要运行git push -u origin remote-branch-name
  • 这将导致头部脱离状态


有时你被要求不要摆弄主分支机构,只在远程分支机构工作(我被要求这样做)。所以你所需要的只是远程分支。

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

1
git clone url --branch remote_branch_name

在哪里?远程分支名称是远程分支的名称

例如,

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

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

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



git fetch --all & git checkout


假设你的遥控器是git@xyz.git,你想要它的随机分支。流程如下:

  • 首先检查遥控器列表


    git remote -v

  • 如果上面命令的输出中没有git@xyz.git远程文件,则可以通过


    git remote add xyz git@xyz.git

  • 现在你可以通过

    git fetch xyz

  • 现在,通过

    git checkout -b my_copy_random_branch xyz/random_branch

  • 检查分支列表

    git branch -a

  • 本地分支"我的拷贝"随机分支将跟踪远程设备的随机分支。


    git fetch && git checkout 应该有办法


    步骤如下:

  • git fetch origingit fetch --all,这将把所有远程分支提取到您的本地,然后这是您可以处理的第二个选项。

  • git checkout --track origin/

  • 然后在这个分支上工作,您可以通过键入来验证您是否在那个分支上。

    1
    git branch

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


    如果你已经这样了解你的远程分支…

    1
    2
    3
    git remote
    => One
    => Two

    你知道你想结帐的分行名称,如br1.2.3.4,然后就可以了。

    1
    2
    git fetch One
    => returns all meta data of remote i.e. the branch name in question.

    只剩下结帐了

    1
    git checkout br.1.2.3.4

    然后再把它的任何新分支去掉。


    简单尝试

    $git pull origin您的分支机构名称

    • rizo,git-pull-origin-branch-name应该是最好的解决方案。你是唯一一个将此作为解决方案发布的人,它对我有效。这是因为它将用主分支更新您的分支。简单而简单。
    • 问题在于,它将尝试将远程分支与当前分支合并,而不是远程分支(因为这是本地回购的新分支)


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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    % 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.
    %

    在本例中,我将重新设置repo,但可能还有其他技术,例如git shallow clone(clone--depth)会错过远程分支。


    我想给您一个命令,用于将所有远程分支提取到本地,并切换到所需的新创建的本地分支:

    1
    git fetch && git checkout discover

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

    1
    2
    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 ,正如我们在上面的示例中所做的那样。

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

  • 硕士和2。在本地列表中查找。

  • 检查你的.git/config,特别是那个遥控器的fetch上有什么跟踪。

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

    如果有heads/*指向randomRemote/*,运行git fetch randomRemote时,它将获取所有分支。然后你就可以结帐了。

    否则,

  • 您需要使用此命令向跟踪添加远程分支。运行后,请检查您的.git/config。你会理解的。Git远程集分支--添加RandomRemote RandomBranch

  • 运行git fetch randomRemote。这将获取远程分支。

  • 现在你可以运行git checkout randomBranch


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

    1
    git checkout branchName

    这将把远程分支提取到本地,并自动跟踪远程分支。


    你用"git pull"把你的树枝分开。我将使用实际回购和分行名称来帮助,因为"lbranch"和"rbranch"很难解读。

    让我们使用:

  • myteam.unfuddle.com=远程git服务器
  • TLC=存在回购的非预算项目账户
  • Daves_Branch=远程分支名称

    无论有多少个分支机构,您或任何同事都可以运行它来只拉您的分支机构:

    1
    2
    git init
    git pull git@myteam.unfuddle.com:myteam/tlc daves_branch:refs/remotes/origin/daves_branch


    git branch --track origin/

    • 这在Git版本1.8.3.1上对我有效。


    一个简单的命令-"git checkout remote_branch_name"将帮助您创建一个在远程分支中具有所有更改的本地分支。


    1
    2
    git checkout -b branch_name
    git pull remote_name branch_name

    • 虽然这段代码可能会回答这个问题,但最好包括一些关于它所做的以及它与这里已有的大量答案有何区别的解释。
    • 我个人不喜欢这个选择。因为在您从master创建一个新分支,然后从远程分支提取数据的情况下,该远程分支可能与master位于同一页上,也可能不在同一页上,并且可能会邀请一些不必要的代码更新。