如何仅获取远程Git存储库的一个分支?

如何仅获取远程Git存储库的一个分支?,git,Git,我想获取远程存储库的一个分支(不是所有分支),并创建一个本地跟踪分支,该分支可以跟踪该远程分支的进一步更新。远程存储库中的其他分支非常大,因此我希望避免获取它们。如何做到这一点?一种方法如下: git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch> git fetch:refs/remotes// 但这并没有设置跟踪 有关详细信息,请参阅 编

我想获取远程存储库的一个分支(不是所有分支),并创建一个本地跟踪分支,该分支可以跟踪该远程分支的进一步更新。远程存储库中的其他分支非常大,因此我希望避免获取它们。如何做到这一点?

一种方法如下:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>
git fetch:refs/remotes//
但这并没有设置跟踪

有关详细信息,请参阅


编辑:As@user1338062:如果您还没有要添加新分支的存储库的本地克隆,但您想创建一个新的本地存储库,那么
git clone--branch--single branch
提供了一个较短的解决方案。

如果您想更改“git pull”和“git fetch”的默认值要仅获取特定的分支,则可以编辑.git/config,以便远程配置如下所示:

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master
默认情况下,这将仅从源站获取主服务器。 有关更多信息,请参阅:

编辑:刚刚意识到这与-t选项对git remote add所做的相同。如果您不想删除遥控器并使用-t再次添加它,那么在添加遥控器后,至少这是一种很好的方法。从作者的帖子中复制:

使用
-t
选项来
git remote add
,例如:

git remote add -t remote-branch remote-name remote-url

您可以使用多个
-t分支
选项来获取多个分支。

要更新现有远程以跟踪特定分支,请仅使用:

git remote set-branches <remote-name> <branch-name>
git-fetch

为我工作。

为了完整起见,下面是一个新签出的示例命令:

git clone --branch gh-pages --single-branch git://github.com/user/repo
如其他答案中所述,它设置
remote.origin.fetch
,如下所示:

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages
一种方法是:

在.git/config中,远程repo的fetch应设置为获取任何分支:

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*
要获取远程分支,请执行以下操作:

git fetch origin branch-name
要创建本地分支“分支名称”,请设置从源位置跟踪远程分支“分支名称”

git checkout -b branch-name origin/branch-name
列出所有分支

git branch -a
git版本:2.74

我就是这样做的:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]
我的变通办法:

git fetch --depth=1
git checkout <branch_name>
git fetch--depth=1
git签出
如果您没有本地克隆:

git clone --depth 1 -b <branch_name> <repo_url>
git克隆--深度1-b
  • 选择任何您想使用的
    (请随意使用
    源代码
    然后跳过步骤1。)
  • git远程添加
  • git fetch
  • 选择任何要使用的
    。可以与
    相同
  • git checkout/-b

  • 希望有帮助

    我知道已经有很多答案了,但这些步骤对我很有效:

  • git fetch
  • git分支提取头
  • git签出
  • 这些问题基于@Abdulsattar Mohammed的答案、@Christoph对该答案的评论以及其他堆栈溢出问题及其答案:


    git版本2.16.1.windows.4

    只需执行一个git fetch remoteRepositoryName branchName
    (例如:git fetch origin my\u local\u branch)
    就足够了。将完成提取,并使用相同的名称创建新的本地分支,跟踪将设置为远程分支


    然后执行git checkout branchName

    答案实际上取决于您拥有的跟踪分支的当前列表。只有当分支已在跟踪分支列表中时,才可以使用git fetch从远程获取特定分支(可以使用git branch-r检查)

    让我们假设我之前克隆了远程with--single branch选项,在本例中,我仅有的一个跟踪分支是“克隆”分支。建议手动调整git配置,以及键入
    git remote add
    命令,这让我有点困惑。由于“git remote add”设置了一个新的远程存储库,它显然不能与现有的远程存储库一起工作;提供“-t分支”选项对我没有帮助

    如果远程存在,并且要获取的分支存在于该远程中:

  • 使用
    git branch-r
    检查是否可以将此分支视为跟踪分支。如果没有(与我使用单分支克隆的情况相同),请使用--add选项通过“git remote set branchs”将此分支添加到跟踪分支列表中:
    • git远程设置分支--添加
  • 从远程获取已添加的分支:
    • git fetch
      注意:只有从远程获取新的跟踪分支后,您才能在跟踪分支列表中使用
      git branch-r
      看到它
  • 使用“checkout--track”创建并签出一个新的本地分支,该分支将被赋予与跟踪分支相同的“branch_name”:
    • git签出——跟踪

      • 最简单的方法

          git fetch origin <branch> && git checkout <branch>
        

        git克隆获取整个存储库,包括所有分支。您可以创建浅拷贝,但这只允许您指定修订的数量,而不允许指定哪个branchs.git clone只接受master。如果你去拿的话,要花上所有的树枝。这是按照op的要求做的。要创建跟踪分支git checkout-t/如果我只是执行
        git checkout
        ,我看到git会自动设置跟踪分支,如果唯一具有该名称的分支是远程分支。这是唯一对我有效的方法。即使配置被设置为仅获取单个分支的引用,它仍然使用fetch或pull将引用拉到所有分支。这个命令只拉了我想要的分支,所以回购协议只有500kb而不是5mb。谢谢。这个答案可能已经过时了
        git clone
        现在支持
        --branch
        --single branch
        选项,我发布了。@user1338062如果在cloningprogit.org/book/ch9-5链接移动到刚刚得知获取的bra之后,您只想获取一个新分支(不是所有使用git fetch的分支),则此选项仍然有效
        git clone --depth 1 -b <branch_name> <repo_url>
        
          git fetch origin <branch> && git checkout <branch>
        
           git fetch origin uat && git checkout uat