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

时间:2011-06-16 08:20:54

标签: git

我想获取远程存储库的单个分支(不是所有分支),并创建一个本地跟踪分支,可以跟踪对该远程分支的进一步更新。远程存储库中的其他分支非常大,所以我想避免获取它们。我该怎么做?

编辑:我自己想出来了,但StackOverflow拒绝让我提供答案作为答案,所以我会把它放在问题中。

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

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

您可以使用多个“-t branch”选项来抓取多个分支。

14 个答案:

答案 0 :(得分:161)

git fetch <remote_name> <branch_name>

为我工作。

答案 1 :(得分:60)

以下是一种方法:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

但这并没有设置跟踪。

有关详细信息,请参阅the documentation of git fetch

编辑:正如@ user1338062 notes below:如果您还没有要添加新分支的存储库的本地克隆,但您想创建一个新的本地存储库,然后git clone --branch <branch_name> --single-branch <repo_url>提供了一个更短的解决方案。

答案 2 :(得分:21)

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

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

来自git help remote

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

答案 3 :(得分:16)

一种方法:

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

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*

获取远程分支:

git fetch origin branch-name

创建一个本地分支'branch-name'设置为从源跟踪远程分支'branch-name'。

git checkout -b branch-name origin/branch-name

列出所有分支

git branch -a

答案 4 :(得分:15)

从作者的帖子中复制:

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

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

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

答案 5 :(得分:12)

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

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

这些基于@Abdulsattar Mohammed的答案,@ Christoph对该答案的评论以及其他堆栈溢出问题及其答案:

答案 6 :(得分:10)

如果要将“git pull”和“git fetch”的默认值更改为仅获取特定分支,则可以编辑.git / config以使远程配置看起来像:

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master

默认情况下,这只会从origin获取master。 有关详细信息,请参阅:https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

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

答案 7 :(得分:8)

为了完整起见,这是一个新结账的示例命令:

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

答案 8 :(得分:8)

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

让我们假设以前已经使用--single-branch选项克隆了远程服务器,在这种情况下,我仅有的一个跟踪分支是“克隆”分支。建议您手动调整git config以及键入git remote add <remote_name> <remote_url>命令来使我感到困惑。当“ git remote add”设置一个新的远程服务器时,它显然不适用于现有的远程存储库;提供“ -t分支”选项对我没有帮助。

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

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

答案 9 :(得分:5)

git版本:2.74

我就是这样做的:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]

答案 10 :(得分:4)

git版本2.16.1.windows.4

仅执行 git fetch remoteRepositoryName branchName (eg: git fetch origin my_local_branch)就足够了。将完成提取操作,并创建一个具有相同名称的新本地分支并将跟踪设置为远程分支。

然后执行 git checkout branchName

答案 11 :(得分:4)

最简单的方法

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

示例:我想从原点获取uat分支并将其切换为当前工作分支。

   git fetch origin uat && git checkout uat

答案 12 :(得分:1)

我的解决方法:

git fetch --depth=1
git checkout <branch_name>

如果您没有本地克隆:

git clone --depth 1 -b <branch_name> <repo_url>

答案 13 :(得分:1)

  1. 选择您想要使用的where prefix_cd >= '0' and prefix_ce < ':' (随意使用<remote_name> 并跳过第1步。)
  2. origin
  3. git remote add <remote_name> <remote_url>
  4. 选择您要使用的任何git fetch <remote_name> <branch>。可以与<your_local_branch_name>相同。
  5. <branch>
  6. 希望有所帮助!