【问题标题】:best way to work with a develop branch in 3 way repo love triangle以 3 方式回购三角恋的最佳方式与开发分支合作
【发布时间】:2018-01-23 19:54:41
【问题描述】:

与大师合作,我们的工作流程是

  1. fork 原始(上游)github repo 以拥有 github repo(origin)
  2. 在本地签出自己的 github 存储库。
  3. 在本地创建master的特性分支
  4. 做一些工作
  5. 将功能组推回自己的分叉回购
  6. 创建拉取请求。
  7. 时间过去了,其他人更新上游 master 分支。
  8. 将上游 repo 与本地 repo 同步,然后推送到原点(3 路同步)
  9. 从第 3 点开始,执行下一个功能。

使用 master 分支的特性分支,上面的流程很容易在 git 中使用:

  1. 在 github UI 中将上游 /original/ repo 复制到您自己的副本。
  2. git 克隆https://github.com/YOUR-USERNAME/project.git
  3. git checkout -b my_branch
  4. 做一些工作。
  5. git commit -m...
  6. git push origin my_branch.
  7. 通过 gitub UI 进行拉取请求

时间过去了,其他人更改了上游仓库,所以获取这些更改并将它们合并到您的本地然后返回到您的分叉仓库:

  1. git远程添加上游https://github.com/original/project.git
  2. git fetch --all
  3. git checkout master
  4. git 合并上游/master
  5. git push origin master.

现在你的本地 repo 和你 github 中的分叉 repo 是从上游原始 repo 更新的,你可以做更多的工作。

问题是现在我们必须做同样的事情,但是使用开发分支,但是上面的方法不起作用。

首先,如果我们这样做:

git fetch --all

这实际上是从源站和上游获取开发分支吗?

我会假设它会继续。接下来我假设你会这样做:

 git checkout develop

这失败了(“开发没有匹配任何文件”)没有明显的原因(如果你可以结帐主人,为什么不开发?为什么试图匹配文件而不是分支)。接下来我们试试这个:

git checkout origin/develop

这给出了可怕的分离头错误。我们已经阅读了很多关于此的内容,例如here,但对底层 git 的工作方式了解不够,无法理解。我们只能假设这不是我们想要的并继续前进。谷歌搜索产生了几个推荐的解决方案:

git checkout -b develop origin/develop
git checkout --track origin/develop
git branch develop origin/develop

我不知道以上是否都是等价的,或者我们应该尝试哪个。

$ git branch -a
master
feature_branch1
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
remotes/origin/feature_branch1
remotes/upstream/develop
remotes/upstream/master

这很奇怪 - 克隆的本地 repo 缺少开发分支,但 origin(它是从中克隆的)有它。看来clone没有clone,而是选择性地只复制了一些分支。

假设以上三个命令之一是正确的。

接下来我们需要

  1. 从上游远程的开发分支中提取任何更改(git pull --all 会这样做吗?),
  2. 将上游分支与我们的本地开发分支合并。
  3. 将本地开发分支推回源远程。
  4. 创建 delelop 分支的新功能分支。
  5. 将此功能推送到原点
  6. 执行拉取请求
  7. 返回步骤 1。

任何想法我们如何做到这一点?

============= 更新===============

为了大家的快乐,基于 Narahari 的出色回答,这里是完整的解决方案:

在本地仓库中创建开发分支(克隆不这样做)

  1. git checkout -b 开发起源/开发

从上游更新开发分支(原始仓库)

  1. git fetch --all
  2. git checkout 开发
  3. git 合并上游/开发
  4. git push origin 开发

在功能分支上做一些工作:

  1. git checkout 开发
  2. git checkout -b my_develop_feature_branch
  3. 做一些工作
  4. git commit -m ...

将更改推送到您的分叉仓库:

  1. git push origin my_develop_feature_branch

在 github 中创建一个 git pull 请求,指定上游开发分支为目标。

【问题讨论】:

    标签: git branch


    【解决方案1】:

    你可以这样尝试,就像你在 master 分支上做的一样:

    git checkout -b develop origin/develop --> 从你的分叉 github repo 创建一个名为“develop”的本地分支

    从开发分支创建一个功能分支,并合并到您的远程“开发”分支

    当其他人对上游/开发分支进行更改时

    git fetch --all --> 从所有远程点获取您的 repo(上游和源)

    git checkout develop --> 转到本地开发分支

    git merge upstream/develop --> 将上游/开发合并到本地开发分支

    git push origin develop --> 将最新更改从本地开发推送到远程“开发”分支

    还要回答您关于“git fetch --all”命令的问题, git fetch origin 仅从源获取数据,git fetch --all 从所有远程获取数据(origin 是其中之一)。所以它将从originupstream 以及任何其他相关的遥控器中提取。希望这会有所帮助

    【讨论】:

    • 非常感谢,我会试试这个。关于“git fetch --all”,问题是它是否获取开发分支,因为 git clone 没有。
    • 在开发中创建功能分支的正确方法是什么?只是“git checkout develop”后跟“git checkout -b my_develop_feature_branch”,还是会创建一个master分支?例如。我们是否必须做类似“git checkout -b my_develop_feature_branch origin/develop”或“git checkout -b my_develop_feature_branch origin/my_develop_feature_branch”之类的事情?
    • 是的 git fetch -all 将获取开发分支。
    • 你可以简单地执行 git checkout -b "my_develop_feature_branch" origin/develop。这将创建一个本地功能分支并将其跟踪到您的远程开发分支。我猜这将是最简单的方法如果您只是创建一个说“git checkout -b my_develop_feature_branch”的分支,它不会将本地分支跟踪到任何远程分支。在推送代码之前,您可以使用 git upstream 命令单独执行此操作。所以最好在创建分支时设置这个跟踪
    • 一个有用的管理开发和特性分支的工具在下面的这个链接中给出:它被称为 git-flow 并管理开发和特性分支如果你有兴趣看看它:jeffkreeftmeijer.com/git-flow
    猜你喜欢
    • 2015-05-18
    • 2016-08-22
    • 2011-01-09
    • 2013-11-07
    • 2011-05-26
    • 2011-06-18
    • 2011-08-21
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多