跟踪在GitHub上创建的新远程分支


183

我已经有一个本地主分支跟踪github项目的远程主分支。现在,我的一个合作者在同一项目中创建了一个新分支,我想据此执行以下操作:

  1. 在本地创建一个新分支
  2. 使这个新分支跟踪新创建的远程分支。

我应该怎么做呢?


2
git checkout --track -b <本地分支> <远程> / <跟踪分支>也可以。
米莱斯特(Mister)2012年

14
...或者只是git checkout -t <remote>/<whatever>。如果只有一个远程跟踪分支结束,<whatever>您甚至可以这样做,git checkout <whatever>而git会猜测您的意思。
Mark Longair 2012年

Answers:


251
git fetch
git branch --track branch-name origin/branch-name

第一条命令确保您在本地存储库中具有远程分支。第二个命令创建跟踪远程分支的本地分支。假定您的远程名称为origin,分支名称为branch-name

--track 远程分支默认情况下启用此选项,您可以忽略它。


3
当我这样做时,我得到一个警告:refname'branch-name'是模糊的。
Ultrasaurus

19
如果只有一个具有该分支名称的远程分支,您可以这样做,git checkout <branchname>而git会自动将其检出并设置一个跟踪分支。只是想重申@Mark Longair在此评论中所说的内容:stackoverflow.com/questions/11262703/…
Ryan Walls 2014年

我的远程分支的名称是remotes/origin/develop?不是origin/develop吗?这些都一样吗?
アレックス

2
我必须这样做git fetch --all,否则将无法获取新的分支机构
mschrimpf '18

如何在Eclipse中执行此操作?当我完成这些操作后cmd,eclipse是否会检测到新分支?
Deckard

31

如果您没有现有的本地分支机构,那么它实际上非常简单:

git fetch
git checkout <remote-branch-name>

例如,如果您获取并且有一个名为的新的远程跟踪分支origin/feature/Main_Page,则只需执行以下操作:

git checkout feature/Main_Page

这将创建一个与远程分支同名的本地分支,并跟踪该远程分支。如果您有多个具有相同分支名称的遥控器,则可以使用不太模糊的名称:

git checkout -t <remote>/<remote-branch-name>

如果您已经建立了本地分支并且不想删除它,请参见如何使现有的Git分支跟踪远程分支?


1
git checkout 1.5-branchremotes/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导致分离的HEAD,并且未创建任何本地分支。我认为答案的这一部分完全是错误的。这是git 2.4.3
Piotr Dobrogost

第一个命令对我来说在git 1.9.3中对我有效,即使对于不同的遥控器也是如此。此行为可能已更改。您第二条命令的结果是我所期望的。如果没有-t,则除了查看远程版本上的特定版本外,您没有指定要执行其他任何操作。
kotoole

1
我同意@PiotrDobrogost的观点,我认为您的陈述“这将创建一个具有相同名称的本地分支……”是错误的。提取执行的操作(称为这种方式)是为远程服务器上的每个分支创建一个远程跟踪分支。这意味着您的本地存储库上有一个名为的分支<remote>/<branch>。远程跟踪分支是只读的,指示该分支在最后一次获取时在远程上的位置。checkout就像Piotr所说的那样,调用该分支引用会使您进入分离的HEAD模式。请注意,指定要获取的远程分支可避免创建不需要的远程跟踪分支。
scanny

2
再次澄清:我建议使用命令 git checkout feature-branch。我不建议使用该命令 git checkout origin/feature-branch ,正如你们俩都指出的那样,这将导致一个无用的分离头。
kotoole '16

简单多了 在cygwin上使用git 2.8.3可以正常工作。
费利佩·阿尔瓦雷斯

29

首先,您必须获取远程存储库:

git fetch remoteName

比您可以创建新分支并将其设置为跟踪所需的远程分支:

git checkout -b newLocalBranch remoteName/remoteBranch

您还可以使用“ git branch --track”代替“ git checkout -b”来指定最大值。

git branch --track newLocalBranch remoteName/remoteBranch

如果确实checkout -b使用远程分支作为起点,那么实际上没有必要再使用--track

5
另外,如本注释中所述,如果您只是这样做git checkout <branchname>,并且存在一个具有相同名称的远程分支(在执行以后git fetch),那么本地分支将自动设置为跟踪远程分支。

9

当分支不是远程分支时,可以将本地分支直接推送到远程。

git checkout master
git push origin master

或有开发分支时

git checkout dev
git push origin dev

或存在远程分支时

git branch dev -t origin/dev

还有其他一些可能推动远程分支。


然后,您选择第三个选项。当远程分支存在时,您可以创建本地分支并跟踪远程分支:)其与max中的版本相同,但更短。
勒内Höhle
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.