【问题标题】:Track a new remote branch created on GitHub跟踪在 GitHub 上创建的新远程分支
【发布时间】:2012-07-01 00:56:33
【问题描述】:

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

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

我应该如何正确地做呢?

【问题讨论】:

  • git checkout --track -b / 也可以。
  • ... 或只是git checkout -t <remote>/<whatever>。如果只有一个以<whatever> 结尾的远程跟踪分支,你甚至可以只做git checkout <whatever> 并且git 会猜到你的意思。

标签: git github git-branch


【解决方案1】:
git fetch
git branch --track branch-name origin/branch-name

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

--track 选项默认为远程分支启用,您可以省略它。

【讨论】:

  • 当我这样做时,我收到一个警告:refname 'branch-name' is ambiguous.
  • 如果只有一个远程分支具有该分支名称,您只需执行git checkout <branchname>,git 会自动检查并设置一个跟踪分支。只是想重申@Mark Longair 在此评论中所说的话:stackoverflow.com/questions/11262703/…
  • 我的远程分支的名字是remotes/origin/develop?不应该只是origin/develop吗?这些是一样的吗?
  • 我必须这样做git fetch --all,否则将无法获取新分支
  • 如何在 Eclipse 中做到这一点?当我处理完那些cmd 后,eclipse 会检测到新分支吗?
【解决方案2】:

如果您没有现有的本地分支,它真的很简单:

git fetch
git checkout <remote-branch-name>

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

git checkout feature/Main_Page

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

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

如果您已经创建了本地分支并且不想删除它,请参阅How do you make an existing Git branch track a remote branch?

【讨论】:

  • git checkout 1.5-branchremotes/upstream/1.5-branchgit 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
  • 第一个命令在 git 1.9.3 中对我有用,即使对于不同的遥控器也是如此。这种行为可能已经改变。你的第二个命令的结果是我所期望的。如果没有 -t,除了在遥控器上查看特定版本之外,您没有指定要执行任何操作。
  • 我同意@PiotrDobrogost,我相信你的说法“这会创建一个同名的本地分支......”是错误的。 fetch 做什么(当以这种方式调用时)是为远程上的每个分支创建一个远程跟踪分支。这意味着您本地 repo 上的一个名为 &lt;remote&gt;/&lt;branch&gt; 的分支。远程跟踪分支是只读的,指示该分支在最后一次获取时在远程的位置。正如 Piotr 所说,在该分支 ref 上调用 checkout 会使您处于分离 HEAD 模式。请注意,指定要获取的远程分支可以避免创建不需要的远程跟踪分支。
  • 再次澄清:我建议使用命令git checkout feature-branch。我不建议使用命令git checkout origin/feature-branch,正如你们都指出的那样,这会导致无用的分离头。
  • 简单多了。在 cygwin 上与 git 2.8.3 一起工作正常。
【解决方案3】:

首先你必须获取远程仓库:

git fetch remoteName

然后您可以创建新分支并将其设置为跟踪您想要的远程分支:

git checkout -b newLocalBranch remoteName/remoteBranch

您也可以使用“git branch --track”而不是“git checkout -b”作为指定的最大值。

git branch --track newLocalBranch remoteName/remoteBranch

【讨论】:

  • 如果你使用远程分支作为起点做checkout -b,那么实际上没有必要再使用--track
  • 另外,正如this comment中指出的那样,如果你只是做git checkout &lt;branchname&gt;,并且有一个同名的远程分支(在你做了git fetch之后),那么本地分支将自动设置为跟踪远程的。
【解决方案4】:

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

git checkout master
git push origin master

或者当你有一个开发分支时

git checkout dev
git push origin dev

或者当远程分支存在时

git branch dev -t origin/dev

还有其他一些推送远程分支的可能性。

【讨论】:

  • 那你选择第三个选项。当远程分支存在时,您可以创建本地分支并跟踪远程分支:) 它与 max 版本相同但更短。
【解决方案5】:

步骤如下:

  1. 首先获取克隆后创建的所有分支 此步骤的命令 -> “git fetch”
  2. 现在,检查什么是远程分支 到这一步的命令 -> “git branch -r”
  3. 检查您在日志历史记录中的位置 执行此步骤的命令 -> "git log --oneline --all --graph"
  4. 分配一个新分支来跟踪远程分支 到这一步的命令 -> “git branch branch_name origin/remote_branch_name”
  5. 之后,使用第 3 步命令或“git 分支”检查您的日志历史记录

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 2016-04-04
    • 2013-11-25
    • 2019-08-14
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2013-04-30
    相关资源
    最近更新 更多