我以为我对 git 已经很熟悉了,但我对这个问题有点不知所措。
这是图片:我将一个项目的“开发”分支 fork 到我自己的 github 存储库中,克隆到本地,创建 git-flow 功能,做一些事情并发布。一切都很好。
与此同时,原始项目更改为新的开发分支(称为“develop2”),因此无法将我发布的功能 pull 入主项目。
所以 - 根据建议 - 我创建了一个本地“develop2”分支,删除了我本地的“develop”分支,从主项目 repo 中提取了“develop2”,然后将其与我的本地功能 merge 。一切都很好,除了... 我的个人 github 存储库仍然有旧的“开发”分支和基于该分支的功能。
那么,我的问题是我现在该怎么办? 我考虑过的几个选项:
- 在 github 上完全删除我的“develop”分支,从主项目中分支“develop2”,然后将其 pull 到我的本地存储库并 merge ,然后再次发布我的功能并发出 pull 请求。 (不确定的是:我是否需要克隆而不是 pull 新的 fork 以使其具有正确的来源......)
- 删除 origin 和 feature 上的 'develop' 分支,推送新的 develop2 分支,等等
- 强制将我的“develop2”分支推送到 origin develop,然后重命名它,并对功能执行相同的操作..
如果出现任何问题,尽管我可能不得不重做一大堆至少可以说是令人厌烦的东西。 专家们有什么建议吗?
最佳答案
您绝对不需要重做 - Git 可以很好地处理此类问题。
首先,GitHub 上的分支是整个存储库,因此删除“'develop' 分支”实际上没有任何意义——您只需要将上游 develop2
更改引入您的分支即可。我建议添加一个名为 upstream
的远程服务器,以便轻松地从我 fork 的存储库中获取更改。
现在假设您添加了 upstream
,git fetch
应该将 upstream/develop2
pull 到您的本地存储库中。我会撤消你的 merge (可能是 git reset --hard develop~
),从那里创建一个 develop2
分支以保持一致性,然后 rebase 你的本地 develop2
更改到 upstream/develop2
:git 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:将一个新的开发分支放入我的分支中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978101/