Github:将新的开发分支合并到我的派生仓库中

5
我之前认为自己对Git很熟悉,但我现在遇到了一个问题。具体来说是这样的:我从某个项目的“develop”分支fork到了我的GitHub仓库中,然后将其克隆到了本地,并创建了一个基于git-flow的特性分支,做了一些修改并提交了。一切正常。
与此同时,原始项目切换到了一个新的develop分支(称之为“develop2”),因此我的特性分支无法被合并到主要项目中。
所以,听取建议后,我创建了一个本地的“develop2”分支,删除了我的本地“develop”分支,从主要项目仓库中拉取了“develop2”,然后将其与我的本地特性分支合并。一切正常,除了...我的个人GitHub仓库仍然有旧的“develop”分支以及基于该分支的特性分支。
那么,我的问题是现在该怎么办呢? 我考虑了几个选项:
1.在GitHub上完全删除我的“develop”fork,然后从主要项目中fork“develop2”,将其拉取到我的本地仓库中并合并,再次发布我的特性分支并发起pull请求。(不确定的是,我是否需要克隆而不是拉取新的fork,以使其具有正确的来源..)
2.删除远程的“develop”分支和特性分支,推送新的“develop2”分支,等等。
3.强制将我的“develop2”分支推到远程的develop分支上,然后重命名它,并对特性分支做同样的操作。
但如果出现任何问题,我可能会陷入不得不重新做很多工作的困境,这无疑是令人疲惫的。 有没有高手能给我一些建议?
1个回答

3

你绝对不需要重新做 - Git 已经配备了应对这种问题的工具。

首先,GitHub 上的 fork 是整个仓库,因此删除你的“develop fork”并没有实际意义 - 你只需要将上游的 develop2 更改合并到你的 fork 中。我建议添加一个名为 upstream 的远程仓库,以便轻松地从我分叉的仓库中获取更改。

现在假设你已经添加了 upstreamgit fetch 命令应该会将 upstream/develop2 拉取到你的本地仓库中。我建议撤销你的合并操作(可能是 git reset --hard develop~),从那里创建一个一致的 develop2 分支,然后将你本地的 develop2 更改变基于 upstream/develop2git rebase --onto upstream/develop2 upstream/develop develop

之前:

              X---Y---Z upstream/develop2
             /
            |           H---I---J  develop, develop2
            |          /
            | E---F---G  upstream/develop
            |/
A---B---C---D

之后:

                        H'--I'--J' develop2
                       /
              X---Y---Z upstream/develop2
             /
            |           H---I---J  develop
            |          /
            | E---F---G  upstream/develop
            |/
A---B---C---D

谢谢 - 是的,那很有道理。但我认为我已经找到了答案来使我的Github仓库与本地保持一致。基本上是以上的第二个选项,但需要注意Github上的一个细节。页面在这里:http://matthew-brett.github.com/pydagogue/gh_delete_master.html总结一下:
  1. git push origin develop2(将新的开发分支推送到Github仓库)
  2. 转到Github仓库,单击“管理”,将默认分支设置为develop2
  3. 然后可以删除旧的开发分支,即git push origin : develop
  4. 然后按照正常方式推送功能。
- Peter D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接