使用3方式回归爱情三角形的开发分支的最佳方式

时间:2018-01-23 19:54:41

标签: git branch

与master合作,我们的工作流程是

  1. 将原始(上游)github repo分支到自己的github repo(origin)
  2. 在本地结帐自己的github回购。
  3. 创建本地主人的功能分支
  4. 做一些工作
  5. 推送功能banch回到自己的分叉回购
  6. 创建拉取请求。
  7. 时间过去了,其他人更新了上游主分支。
  8. 将上游reapo与本地仓库同步,​​然后向上推至原点(3路同步)
  9. 从第3点开始,然后执行下一个功能。
  10. 使用master分支的功能分支,上面的流程很容易在git中使用:

    1. 在github UI中将上游/原始/ repo分叉到您自己的副本。
    2. git clone 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执行拉取请求
    8. 时间过去了,其他人改变了上游的reapo,所以得到这些更改并将它们合并到你的本地然后再回到你的分叉回购:

      1. git remote add upstream https://github.com/original/project.git
      2. git fetch --all
      3. git checkout master
      4. git merge upstream / master
      5. git push origin master。
      6. 现在你的本地仓库和你的github上的分叉仓库都是从上游的原始仓库更新的,你可以做更多的工作。

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

        首先,如果我们这样做:

        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
        

        这是相当奇怪的 - 克隆的本地仓库缺少开发分支,但原产地(它是从中克隆的)有它。似乎克隆没有克隆,但有选择地只复制一些分支。

        让我们假设上述三个命令之一是正确的。

        接下来我们需要

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

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

          为了大家的荣幸,基于Narahari的优秀答案,这是完整的解决方案:

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

          1. git checkout -b develop origin / develop
          2. 从上游(原始仓库)更新开发分支

            1. git fetch --all
            2. git checkout develop
            3. git merge upstream / develop
            4. git push origin develop
            5. 在功能分支上做一些工作:

              1. git checkout develop
              2. git checkout -b my_develop_feature_branch
              3. 做一些工作
              4. git commit -m ...
              5. 将更改推送到您的分叉回购:

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

1 个答案:

答案 0 :(得分:2)

你可以这样尝试,就像你对master分支一样:

git checkout -b develop origin/develop - >创建一个名为" develop"的本地分支。来自你的分叉github回购

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

随着其他人对上游/开发分支进行更改

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

git checkout develop - >转到您当地的开发分支

git merge upstream/develop - >合并上游/开发到您当地的开发分支

git push origin develop - >推动从本地开发到您的遥控器的最新变化" develop"分支

还要回答关于" git fetch --all"的问题。命令, git fetch origin仅从原点获取数据,git fetch --all从所有远程提取数据(origin是其中之一)。因此它将从originupstream以及任何其他相关联的遥控器中拉出来。希望这有帮助