Git 获取远程分支

我和我的同事正在同一存储库上工作。我们已经将其分为两个分支,每个分支在技术上都针对不同的项目,但是它们具有相似之处,因此有时我们需要从该branch提交给 * master

但是,我有branch 。我的同事该如何专门拉那个分支?

仓库的git clone似乎并没有为他本地创建分支,尽管我可以看到它们在推到最后后仍处于松散状态。

另外,当我最初创建分支时,我做了-b checkout 。这有什么不同吗?

$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

$ git fetch origin discover
$ git checkout discover

这些是我运行的命令。但这绝对是行不通的。

我希望能够检出该分支,然后将各种协作者或工作站的分支更改推回并提交

答案

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

对于最新版本的 Git:

git checkout --track origin/daves_branch

--trackgit checkout -b [branch] [remotename]/[branch]简写git checkout -b [branch] [remotename]/[branch] ,其中 [remotename] 是起源 ,而 [branch] 是相同的两倍,在这种情况下是daves_branch

对于 Git 1.5.6.5,您需要:

git checkout --track -b daves_branch origin/daves_branch

对于 Git 1.7.2.3 及更高版本,这已经足够了(它可能更早开始了,但这是我可以很快找到的最早的确认):

git checkout daves_branch

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

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

我使用了fetch然后checkout ...

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

... 其中<rbranch>是远程分支或源 ref,<lbranch>是您要跟踪的尚不存在的本地分支或目标 ref ,并且您可能想将其命名为远程分支或源 ref 。在<refspec>的说明中的选项下对此进行了说明。

Git 非常聪明,如果我在远程分支的前几个字母后按Tab 键 ,它将自动完成第一个命令。也就是说,我什至不必命名本地分支,Git 会自动为我复制远程分支的名称。谢谢吉特!

就像在类似的 Stack Overflow 帖子中显示的答案一样 ,如果您未在fetch命名本地分支,则在使用-b标志检出它时仍可以创建它。 也就是说, git fetch <remote> <branch>后跟git checkout -b <branch> <remote>/<branch>跟我最初的回答完全一样。显然,如果您的存储库只有一个远程服务器,则只需在fetch后执行git checkout <branch> ,它将为您创建一个本地分支。 例如,您刚刚克隆了一个存储库,并想从远程签出其他分支。

我相信某些fetch的文档可能是从pull逐字复制的。特别是选项中 <refspec>上的部分是相同的。但是,我不认为fetchmerge ,因此,如果将冒号的目标端留空,则fetch 应该什么也不做

注意: git fetch <remote> <refspec>git fetch <remote> <refspec>的缩写git fetch <remote> <refspec>:因此不会执行任何操作,但是git fetch <remote> <tag>git fetch <remote> <tag>:<tag>应该在本地复制远程<tag>

我想这仅对您要在本地复制远程分支而不是立即将其签出有用。否则,我现在将使用已接受的答案 ,该答案将在结帐描述的第一部分中详细说明 ,稍后在--track解释下的选项部分中将进行详细说明,因为它是--track的。 嗯...有点像一线,因为您仍然必须先运行git fetch <remote>

仅供参考: <refspecs> (源:目标)的顺序说明了 Git 1.7 之前的怪异方法,用于删除远程分支 。也就是说,什么都不要推入目标 refspec 中。

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

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

假设您要从origin获取。如果不是,请用您的远程名称替换origin

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

git fetch --all
git checkout myBranch

我收到此消息:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

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

还有一个git-ls-remote命令来查看该遥控器的所有引用和标签。

标题和问题混淆了:

  • Git 获取远程分支
  • 我的同事该如何专门拉那个分支。

如果问题是, 我如何才能使用远程分支,或者如何 Git 签出远程分支? ,一个更简单的解决方案是:

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

git checkout <branch_name>

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

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

请参阅 Git 结帐文档

给你的朋友:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

采用:

git checkout -b serverfix origin/serverfix

这是 Git 提供--track速记的足够普遍的操作:

git checkout --track origin/serverfix

实际上,这是如此普遍,以至于甚至有一个快捷方式。如果您要检出的分支名称(a)不存在,并且(b)仅与一个远程上的名称完全匹配,Git 将为您创建一个跟踪分支:

git checkout serverfix

要使用与远程分支不同的名称来设置本地分支,可以轻松地使用具有不同本地分支名称的第一个版本:

git checkout -b sf origin/serverfix

现在,您的本地分支sf将自动从origin/serverfix

资料来源: Pro Git,第二版 ,由 Scott Chacon 和 Ben Straub 撰写 (出于可读性的考虑)

至少对我而言,最简单的方法是:

git fetch origin <branchName> # Will fetch the branch locally
git checkout <branchName> # To move to that branch

使用以下简单命令:

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

您也可以一枪获取并检出远程分支:

git fetch && git checkout the-branch-name