abe*_*aut 6 git version-control merge github
我正在研究由GIT管理的多分支项目.
我们的工作流程目前是这样的:
master
|-> v1/master
|-> v1/dev
Run Code Online (Sandbox Code Playgroud)
注意:每个开发人员都会创建v1/dev的"分支"来实现任务.我们可能会从v1/dev中删除多个分支
我们需要添加一个名为v1/debug的v1/master的分支.当前的v1/dev分支必须支持v1/debug.
我们针对这个新工作流程:
master
|-> v1/master
|-> v1/debug
|-> v1/dev
Run Code Online (Sandbox Code Playgroud)
注意:每个人都必须继续制作v1/dev的"fork"来实现单元任务.
我正在寻找一个解决方案来添加中间分支v1/debug.
经过一些研究,我会使用git rename branch命令(如何重命名本地Git分支?).
此命令是否保留分支层次结构?
我可以将v1/dev重命名为v1/debug,之后使新的v1/dev分支whitout在当前v1/dev分支的当前开发分支结果中出现问题吗?
开发人员能否在v1/debug中合并重命名的v1/dev的单元分支结果?
Fox*_*Fox 12
首先,不要重命名分支.您可以重命名本地分支,但这仅适用于您.请记住,git是一个分布式系统.人们有权使用与关联的远程跟踪分支不同的名称来命名其本地分支.
例如,v2/debug可能是跟踪远程跟踪分支的本地分支的名称origin/v1/master(我知道,这没有意义,但是因为git是一个分布式系统,人们可以在本地命名他们想要的东西.
不要远程重命名分支.这会搞砸一切,因为它不会改变同事的本地存储库.他们的本地分支机构将继续指向相同的远程跟踪分支(同名).
您只需要创建一个新分支并使其从v1/master当前点开始.要创建它并直接切换到它:
git checkout -b v1/debug v1/master
Run Code Online (Sandbox Code Playgroud)
或者只创建它但保留在当前分支上:
git branch v1/debug v1/master
Run Code Online (Sandbox Code Playgroud)
分支是在本地创建的,仍然需要推送给其他人以便能够看到它.
稍后,您唯一需要的是更改合并工作流程.从现在开始,停止v1/dev直接合并v1/master,并将其合并到v1/debug.并合并v1/debug成v1/master每当代码库已准备就绪.
你在谈论分支层次结构.实际上,git的分支层次结构是"未知".它只是你合并的方式(哪个分支到哪一个)最终形成层次结构.
初始状态(仅v1/master和v1/dev).这里,假设v1/dev提前1次提交v1/master.我们还假设我们目前在分支机构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.从现在开始,你所谓的"层级"开始显得清晰.

现在你有3个明确的分支与想要的工作流程!
请注意,如果您使用,图表将只显示如下git merge --no-ff.它使图片中的内容更清晰,所以我假设合并是非快进的,所以我们总是看到发生了什么,即使这些合并提交实际上是无用的.