【发布时间】:2018-01-23 19:54:41
【问题描述】:
与大师合作,我们的工作流程是
- fork 原始(上游)github repo 以拥有 github repo(origin)
- 在本地签出自己的 github 存储库。
- 在本地创建master的特性分支
- 做一些工作
- 将功能组推回自己的分叉回购
- 创建拉取请求。
- 时间过去了,其他人更新上游 master 分支。
- 将上游 repo 与本地 repo 同步,然后推送到原点(3 路同步)
- 从第 3 点开始,执行下一个功能。
使用 master 分支的特性分支,上面的流程很容易在 git 中使用:
- 在 github UI 中将上游 /original/ repo 复制到您自己的副本。
- git 克隆https://github.com/YOUR-USERNAME/project.git
- git checkout -b my_branch
- 做一些工作。
- git commit -m...
- git push origin my_branch.
- 通过 gitub UI 进行拉取请求
时间过去了,其他人更改了上游仓库,所以获取这些更改并将它们合并到您的本地然后返回到您的分叉仓库:
- git远程添加上游https://github.com/original/project.git
- git fetch --all
- git checkout master
- git 合并上游/master
- 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,而是选择性地只复制了一些分支。
假设以上三个命令之一是正确的。
接下来我们需要
- 从上游远程的开发分支中提取任何更改(git pull --all 会这样做吗?),
- 将上游分支与我们的本地开发分支合并。
- 将本地开发分支推回源远程。
- 创建 delelop 分支的新功能分支。
- 将此功能推送到原点
- 执行拉取请求
- 返回步骤 1。
任何想法我们如何做到这一点?
============= 更新===============
为了大家的快乐,基于 Narahari 的出色回答,这里是完整的解决方案:
在本地仓库中创建开发分支(克隆不这样做)
- git checkout -b 开发起源/开发
从上游更新开发分支(原始仓库)
- git fetch --all
- git checkout 开发
- git 合并上游/开发
- git push origin 开发
在功能分支上做一些工作:
- git checkout 开发
- git checkout -b my_develop_feature_branch
- 做一些工作
- git commit -m ...
将更改推送到您的分叉仓库:
- git push origin my_develop_feature_branch
在 github 中创建一个 git pull 请求,指定上游开发分支为目标。
【问题讨论】: