不附加头的情况下获取和检出远程分支

3
我通过 git fetch origin name-of-branch:refs/remotes/name-of-branch 命令获取远程分支。
当我使用 git checkout name-of-branch 命令时,会进入分离头状态。现在,我可以使用 git checkout -b some-branch-name 命令到达一个命名分支。是否有一种方法可以在一个命令中将远程分支检出到命名分支(甚至是同名的分支)?
如果我使用 git checkout -b name-of-remote-branch 命令(即使用相同名称),然后检出另一个分支,再次检出该分支 git checkout name-of-remote-branch,则会出现以下错误信息:
warning: refname 'name-of-remote-branch' is ambiguous.

然而,如果我先使用git pull,然后再使用checkout,就不会发生这种情况:
Branch name-of-pulled-branch set up to track remote branch name-of-pulled-branch from origin

我认为与所获取分支有关的许多问题是因为它没有设置跟踪远程分支。这是为什么?有没有办法检出抓取的分支,并将其设置为跟踪远程分支,就像使用了git pull一样?


远程分支的“正常”形式是refs/remotes/origin/name-of-branch(假设有一个名为origin的远程),而不是没有远程名称的版本。当你拼写第二个版本时,它会使git的“按我的意思做”算法略微出错。当你使用git pull时,你并没有提供一个“奇怪”的远程分支名称形式。 - torek
@torek,您的意思是与name-of-branch:refs/...相反吗? - Explosion Pills
fetch 的额外参数是“refspecs”,所以“大多数情况下是的” :) 。只是在 x:y 中,x 部分是本地名称,而 y 部分是远程名称,我只输入了远程名称。 (通常我只运行 git fetch -p <remote> 或等效命令,让所有新的远程分支按需出现。)另请参阅手册中的长描述,:y 部分处理得有点奇怪。 - torek
1个回答

2

您希望:

git fetch origin name-of-branch:refs/remotes/name-of-branch
git checkout -b some-branch-name name-of-remote-branch --track

这将设置跟踪,以便git pull/push可以正常工作。

Git pull 可以被视为 git fetch 的超集 - 来自 man 页面的描述:"(Git pull) 使用给定的参数运行 git fetch,并调用 git merge 将检索到的 head 合并到当前分支。" 它还会为您设置跟踪。 - stellarhopper
那么有没有办法在不检出分支的情况下设置跟踪呢?当您使用 git pull 然后 git checkout 时,它会执行“分支设置为跟踪...”。这对我来说意味着您可以获取远程分支,然后在检出之前设置其进行跟踪,就像您已经拉取了它一样。 - Explosion Pills
因此,'fetch' 不会创建任何本地分支。fetch获取远程的所有“数据” - 其分支将作为remote-name/branch-name可用。当您将远程分支作为本地分支检出时,您需要设置跟踪。我认为,当您首次直接拉取远程时,它会获取数据,与您要求的分支合并,并设置跟踪以使未来的Git Pull工作 - 但是我从未真正使用过这种方式的Git Pull。我的工作流一直是 git fetch remote; git checkout -b local remote/somebranch --track; (以及随后的)git pull - stellarhopper
让我们在聊天中继续这个讨论。点击此处进入聊天室 - Explosion Pills
我使用的步骤都在问题中(我不是要挑衅)。基本上,如果我使用 git pull 然后 git checkout some-branch-i-didnt-have-before-pull,它会在那个时刻设置跟踪并显示“分支设置为跟踪...”消息。如果我用 git fetch(获取一个引用,然后使用 git checkout)做完全相同的事情,我会得到分离的 HEAD,并且它没有被设置为跟踪。所以似乎是在检出时设置跟踪。git pullgit fetch 获取的引用之间必须存在差异...但是这种差异是什么呢? - Explosion Pills
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接