获取远程分支

远程包含各种分支,例如origin/daves_branch

$ git branch -rorigin/HEAD -> origin/masterorigin/daves_branchorigin/master

如何在本地签出daves_branch以跟踪origin/daves_branch?我尝试了:

$ git fetch origin discover$ git checkout discover
3958734 次浏览

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

还有一个git-ls-远程命令可以查看该遥控器的所有引用和标签。

更新:使用Git Switch

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

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

git switch daves_branch

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

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


原文

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

对于最新版本的Git:

git checkout --track origin/daves_branch

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

对于Git1.5.6.5你需要这个:

git checkout --track -b daves_branch origin/daves_branch

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

git checkout daves_branch

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

详细信息在这里:3.5 Git分支-远程分支,跟踪分支

我使用了#0,然后是#1

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

…其中<rbranch>是远程分支或来源参考<lbranch>是您要跟踪的不存在本地分支或目的地参考,您可能希望将其命名为与远程分支或源参考相同。这在<refspec>的解释中的选项下进行了解释。

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

同样如在这篇类似的Stack Overflow文章中的答案所示,如果您没有在fetch中命名本地分支,您仍然可以在使用-b标志签出时创建它。那就是,git fetch <remote> <branch>后跟git checkout -b <branch> <remote>/<branch>与我最初的答案完全相同。显然,如果您的存储库有只有一个远程,那么您可以在fetch之后执行git checkout <branch>,它将为您创建一个本地分支。例如,您刚刚克隆了一个存储库,并希望从远程签出其他分支。

我相信fetch的一些留档可能是从#1逐字复制的。特别是选项中关于<refspec>的部分是相同的。然而,我不相信fetch会永远是#4,所以如果你把冒号的目标一侧留空,fetch应该什么都不做

注意:git fetch <remote> <refspec>git fetch <remote> <refspec>:的缩写,因此不会做任何事情,但git fetch <remote> <tag>git fetch <remote> <tag>:<tag>相同,它应该在本地复制远程<tag>

我想这只有在你想在本地复制远程分支时才有帮助,但不一定马上检查出来。否则,我现在将使用公认的答案,它在结帐说明的第一部分中详细解释,稍后在--track的解释下的选项部分中详细解释,因为它是一个单行。嗯…有点单行,因为你必须先运行git fetch <remote>

仅供参考:<refspecs>(来源:目的地)的顺序解释了删除远程分支的奇怪的Git 1.7之前的方法。也就是说,没有将任何内容推送到目标引用规范中。

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

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

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

您使用'git拉'来保持分支分开。我将使用实际的存储库和分支名称来帮助,因为'l分支'和'r分支'很难破译。

让我们使用:

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

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

    git initgit pull git@myteam.unfuddle.com:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
  • 我打字

    git checkout <branch_name>

    并得到

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

    要签出远程存在而不是本地的mySect-这对我有用:

    git fetch --allgit checkout myBranch

    我收到了这条消息:

    Branch myBranch set up to track remote branch myBranch from originSwitched to a new branch 'myBranch'
    git fetch
    git branch -r
    git checkout <branch_name>

    步骤如下:

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

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

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

    git branch

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

    标题和问题混淆了:

    • 获取远程分支
    • 我的同事怎么能具体地拉那个分支。

    如果问题是如何让远程分支工作,或者如何Git签出远程分支?,一个更简单的解决方案是:

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

    git checkout <branch_name>

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

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

    查看Git签出的留档

    给你的朋友:

    $ git checkout discoverBranch discover set up to track remote branch discoverSwitched to a new branch 'discover'

    有时你被要求不要摆弄主分支,只处理远程分支(就像我被要求的那样)。所以你只需要远程分支。

    因此,要单独克隆远程分支(没有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

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

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

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

    git fetch && git checkout the-branch-name

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

    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

    然后再把它做成新的树枝。

    用途:

    git checkout -b serverfix origin/serverfix

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

    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编写(易读性)

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

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

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

    然后您可以检查该分支。

    否则,

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

      git remote set-branches --add randomRemote randomBranch
    2. Run git fetch randomRemote. This will fetch the remote branch.

    3. Now you can run git checkout randomBranch.

    使用这个简单的命令:

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

    在本地获取分支:

    git fetch origin <branchName>

    移动到该分支:

    git checkout <branchName>

    git get ch--all&git check out<分支名称>

    只需尝试:

    git pull origin your_branch_name

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

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

    % git clone --depth 1 https://github.com/repo/codeCloning into 'code'...cd coderemote: Counting objects: 1778, done.remote: Compressing objects: 100% (1105/1105), done.remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0Receiving 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_brancherror: pathspec 'other_branch' did not match any file(s) known to git.% git fetch origin other_branchremote: Counting objects: 47289, done.remote: Compressing objects: 100% (15906/15906), done.remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0Receiving 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_brancherror: pathspec 'other_branch' did not match any file(s) known to git.%

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

    假设您的遥控器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分支。

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

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

    帮助我的是

    1)查看所有可用的远程分支(例如,“远程分支名称”)

    git branch -r

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

    git fetch && git checkout 'remote-branch-name'
    git checkout -b branch_namegit pull remote_name branch_name

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

    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.在您当地的列表中发现。

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

    git fetch origin branchNamegit checkout branchName

    您可以查看它是否已经存在于远程:

    git branch -r

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

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

    git fetch --all

    [快速回答]

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

    -备选案文1:

    git fetch --allgit checkout YourBranch

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

    备选案文2:

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

    也许,这是最简单的方法。

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

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

    请务必将获取参数点设置为/heads/master

    注意git fetch --all,因为这将获取所有,所以可能需要很长时间。

    在我看来,这个在线命令是获取和签出本地不存在的远程分支的最简单方法:git fetch && git checkout remote_branch