git - git 分支重命名会影响分支层次结构吗?

标签 git github version-control merge

我正在处理一个由 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 方式(哪个分支到哪个分支)。

带图片的工作流程示例

  1. 初始状态(仅 v1/masterv1/dev)。这里,假设 v1/devv1/master 提前 1 次提交。还假设我们当前在分支 v1/master 上。 Initial state

  2. 运行 git branch v1/debug v1/master。这只会创建一个标签,指向当前由 v1/master 指向的同一提交。
    Create the new branch v1/debug starting from v1/master

  3. 分支 v1/dev 准备就绪后,将其 merge 到 v1/debug 中。运行 git checkout v1/debug && git merge v1/dev
    Merge v1/dev into v1/debug

  4. 分支 v1/debug 准备就绪后,将其 merge 到 v1/master 中。运行 git checkout v1/master && git merge v1/debug。 从现在开始,你所谓的“等级制度”开始清晰显现。
    Merge v1/debug into v1/master

  5. 在分支 v1/dev 上做一些工作。运行 git checkout v1/dev 并进行多次提交。
    Do some work on v1/dev (commits)

  6. 将其 merge 到 v1/debug 中。运行 git checkout v1/debug && git merge v1/dev
    Merge v1/dev into v1/debug

  7. merge 到v1/master。运行 git checkout v1/master && git merge v1/debug
    Merge v1/debug into v1/master

现在您有 3 个明确的分支以及所需的工作流!

请注意,如果您使用 git merge --no-ff,该图只会看起来像这样。它使图片中的内容更清晰,所以我假设 merge 是非快进,这样我们总能看到发生了什么,即使这些 merge 提交实际上是无用的。

关于git - git 分支重命名会影响分支层次结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952396/

相关文章:

git - 这个文件是 stash 的 - github 错误

git - 如何将文件添加到最后一次本地提交?

github - 如何在 github actions 中执行 if else if 条件

.net - 在我使用 NuGet 的项目上使用 github

css - 对网站进行更改

visual-studio - SVN 与 TFS for asp.net web 应用程序

git - 使用 github.com 查看文件的更改历史

php - 使用 Git、Bitbucket 和 PHP 自动部署

windows - TeamCity 替代方案

git - 无法删除无意中创建的远程分支