我想获取远程存储库的单个分支(不是所有分支),并创建一个本地跟踪分支,可以跟踪对该远程分支的进一步更新。远程存储库中的其他分支非常大,所以我想避免获取它们。我该怎么做?
编辑:我自己想出来了,但StackOverflow拒绝让我提供答案作为答案,所以我会把它放在问题中。
使用-t选项git remote add,例如:
git remote add -t remote-branch remote-name remote-url
您可以使用多个“-t branch
”选项来抓取多个分支。
答案 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)
我知道已经有很多答案了,但是这些是对我有用的步骤:
git fetch <remote_name> <branch_name>
git branch <branch_name> FETCH_HEAD
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分支”选项对我没有帮助。
如果远程存在,并且要获取的分支在该远程中存在:
git branch -r
检查是否可以将此分支视为跟踪分支。如果不是(例如,在我的单个分支克隆中),则使用--add选项通过“ git remote set-branches”将此分支添加到跟踪分支列表中:git remote set-branches --add <remote_name> <branch_name>
git fetch <remote_name> <branch_name>
注意:只有在从远程获取新的跟踪分支之后,您才能使用git branch -r
在跟踪分支列表中看到它。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)
where prefix_cd >= '0' and prefix_ce < ':'
(随意使用<remote_name>
并跳过第1步。)origin
git remote add <remote_name> <remote_url>
git fetch <remote_name> <branch>
。可以与<your_local_branch_name>
相同。<branch>
希望有所帮助!