我正在处理一个由 GIT 管理的多分支项目。
我们目前的工作流程是这样的:
master
|-> v1/master
|-> v1/dev
注意:每个开发者都创建一个 v1/dev 的“fork”来实现任务。可能我们有许多分支继承自 v1/dev
我们需要添加从 v1/master 继承的名为 v1/debug 的分支。 并且当前的v1/dev分支必须继承v1/debug。
我们针对这个新的工作流程:
master
|-> v1/master
|-> v1/debug
|-> v1/dev
注意:每一个都必须继续“fork”v1/dev来实现单元任务。
我正在寻找添加中间分支 v1/debug 的解决方案。
经过一些研究,我会使用 git rename branch 命令(How do I rename a local Git branch?)。
此命令是否保留分支层次结构?
我能否将 v1/dev 重命名为 v1/debug,然后创建新的 v1/dev 分支而不在当前 v1/dev 分支的当前开发分支结果中制造麻烦?
开发人员能否将重命名的 v1/dev 的单元分支结果 merge 到 v1/debug 中?
最佳答案
首先,不要重命名分支。您可以重命名您本地的分支机构,但这只适用于您。请记住,git 是一个分布式系统。人们有权使用与关联的远程跟踪分支机构不同的名称来命名他们的本地分支机构。
例如,v2/debug
可以是跟踪远程跟踪分支 origin/v1/master
的本地分支的名称(我知道,这不会意义,但因为 git 是一个分布式系统,人们可以本地命名他们想要的东西。
也不要远程重命名分支。这会搞砸一切,因为它不会改变你同事的本地存储库。他们的本地分支将继续指向相同的远程跟踪分支(同名)。
您只需要创建一个新分支,并使其从 v1/master
当前所在的点开始。
要创建它并直接切换到它:
git checkout -b v1/debug v1/master
或者只创建它但保留在当前分支上:
git branch v1/debug v1/master
分支是在本地创建的,仍然需要推送给其他人才能看到。
之后,您唯一需要做的就是更改您的 merge 工作流程。从现在开始,停止将v1/dev
直接 merge 到v1/master
中,只 merge 到v1/debug
中。
并在代码库准备就绪时将 v1/debug
merge 到 v1/master
中。
你在谈论分支层次结构。实际上,分支层次结构对于 git 是“未知的”。这只是最终形成层次结构的 merge 方式(哪个分支到哪个分支)。
带图片的工作流程示例
初始状态(仅
v1/master
和v1/dev
)。这里,假设v1/dev
比v1/master
提前 1 次提交。还假设我们当前在分支v1/master
上。运行
git branch v1/debug v1/master
。这只会创建一个标签,指向当前由v1/master
指向的同一提交。
分支
v1/dev
准备就绪后,将其 merge 到v1/debug
中。运行git checkout v1/debug && git merge v1/dev
。
分支
v1/debug
准备就绪后,将其 merge 到v1/master
中。运行git checkout v1/master && git merge v1/debug
。 从现在开始,你所谓的“等级制度”开始清晰显现。
将其 merge 到
v1/debug
中。运行git checkout v1/debug && git merge v1/dev
。
merge 到
v1/master
。运行git checkout v1/master && git merge v1/debug
。
现在您有 3 个明确的分支以及所需的工作流!
请注意,如果您使用 git merge --no-ff
,该图只会看起来像这样。它使图片中的内容更清晰,所以我假设 merge 是非快进,这样我们总能看到发生了什么,即使这些 merge 提交实际上是无用的。
关于git - git 分支重命名会影响分支层次结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952396/