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