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

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

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


您需要创建一个跟踪远程分支的本地分支。下面的命令将创建一个名为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分支远程分支跟踪分支


我用过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:不将任何内容推入目的地参考规范。


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

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

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


要签出远程存在而非本地存在的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'


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

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


标题和问题混淆了:

  • 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'


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>


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>'


帮助我的是

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

1
git branch -r

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

1
git fetch && git checkout '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


假设你的遥控器是[email protected],你想要它的随机分支。流程如下:

  • 首先检查遥控器列表


    git remote -v

  • 如果上面命令的输出中没有[email protected]远程文件,则可以通过


    git remote add xyz [email protected]

  • 现在你可以通过

    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您的分支机构名称


    如果您有一个使用--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 = [email protected]: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 [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch


    git branch --track origin/


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


    1
    2
    git checkout -b branch_name
    git pull remote_name branch_name