Track a new remote branch created on GitHub
我已经有一个本地主分支跟踪Github项目的远程主分支。现在,我的一个合作者在同一个项目中创建了一个新的分支,我希望相应地执行以下操作:
在本地创建新分支
使此新分支跟踪新创建的远程分支。
我该怎么做呢?
- git checkout--track-b/也可以工作。
- …或者只是git checkout -t /。如果只有一个远程跟踪分支以结尾,那么您甚至可以直接执行git checkout 和git猜测您的意思。
- 另请参见如何使现有Git分支跟踪远程分支?.
1 2
| git fetch
git branch --track branch-name origin/branch-name |
第一个命令确保在本地存储库中有远程分支。第二个命令创建跟踪远程分支的本地分支。它假定您的远程名称是origin,分支名称是branch-name。
默认情况下,远程分支启用--track选项,您可以忽略它。
- 当我这样做时,会收到一个警告:refname'branch name'不明确。
- 如果只有一个具有该分支名称的远程分支,您只需执行git checkout ,Git将自动签出该分支并设置跟踪分支。只是想重申一下@mark longair在评论中所说的话:stackoverflow.com/questions/11262703/…。
- 我的远程分支机构的名称是remotes/origin/develop?难道就不应该是origin/develop吗?这些是一样的吗?
- 我必须做git fetch --all,否则新的分支机构将无法提取。
- 如何在Eclipse中执行此操作?当我处理完这些cmd后,Eclipse会检测到新的分支吗?
如果您没有现有的本地分支机构,那么它就非常简单:
1 2
| git fetch
git checkout <remote-branch-name> |
例如,如果您获取并有一个新的远程跟踪分支,名为origin/feature/Main_Page,只需执行以下操作:
1
| git checkout feature/Main_Page |
。
这将创建与远程分支同名的本地分支,跟踪该远程分支。如果有多个具有相同分支名称的远程设备,则可以使用不那么含糊的:
1
| git checkout -t <remote>/<remote-branch-name> |
如果您已经创建了本地分支并且不想删除它,请参阅如何使现有的Git分支跟踪远程分支?.
- git checkout 1.5-branch(remotes/upstream/1.5-branch在git branch -a的输出中)导致error: pathspec '1.5-branch' did not match any file(s) known to git.将其改为git checkout upstream/1.5-branch导致头分离,不创建本地分支。我认为这部分答案是完全错误的。这是Git 2.4.3
- 在Git1.9.3中,第一个命令适用于我,即使是不同的远程设备。这种行为可能已经改变了。你第二次命令的结果就是我所期望的。如果没有-t,除了查看远程服务器上的特定版本之外,您没有指定要执行其他任何操作。
- 我同意@piotrdorgost,我相信您的说法"这创建了一个同名的本地分支…"是错误的。FETCH将要做的(当以这种方式调用时)是为远程上的每个分支创建一个远程跟踪分支。这意味着在你的本地回购中有一家分行,名为/。远程跟踪分支是只读的,指示上次获取时该分支在远程上的位置。正如彼得罗所说,打电话给那个分支参考号的checkout会使你处于独立的头部模式。请注意,指定要获取的远程分支可以避免创建不需要的远程跟踪分支。
- 再次明确:我建议使用命令git checkout feature-branch。我不是建议使用命令git checkout origin/feature-branch,正如你们都指出的,这将导致一个无用的分离的头。
- 简单得多。在Cygwin上可以使用Git 2.8.3。
首先,您必须获取远程存储库:
您可以创建新分支并将其设置为跟踪所需的远程分支:
1
| git checkout -b newLocalBranch remoteName/remoteBranch |
。
您还可以使用"git branch--track"而不是指定的"git checkout-b"。
1
| git branch --track newLocalBranch remoteName/remoteBranch |
。
- 如果您使用远程分支作为起点来执行checkout -b,那么实际上不需要使用--track。
- 另外,正如本文所指出的,如果您只是执行git checkout ,并且有一个同名的远程分支(执行git fetch之后),那么将自动设置本地分支来跟踪远程分支。
当分支不是远程分支时,可以将本地分支直接推送到远程分支。
1 2
| git checkout master
git push origin master |
号
或者当你有一个dev分支时
1 2
| git checkout dev
git push origin dev |
或者当远程分支存在时
1
| git branch dev -t origin/dev |
。
还有一些其他的位置可以推动远程分支。
- 谢谢。但我不想在这里"推一个远程分支"…
- 然后你选择第三个选项。当远程分支存在时,您可以创建本地分支并跟踪远程分支:)它与max版本相同,但更短。