安全地重命名远程源分支[重复]

Posted

技术标签:

【中文标题】安全地重命名远程源分支[重复]【英文标题】:Safely renaming remote origin branch [duplicate] 【发布时间】:2020-02-01 05:00:05 【问题描述】:

我的本​​地分支映射到远程分支:

fetch = +refs/heads/release/old_branch:refs/remotes/origin/release/old_branch

我想将本地和远程old_branch 重命名为new_branch。 w3docs 推荐这个:

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

但是,还有其他几个开发人员也在使用与我相同的远程 old_branch。上述建议在协作环境中是否安全?如果他们的.git/config 有类似于我上面的行,那么这个序列不会混淆他们的 fetch 引用吗?

【问题讨论】:

为什么不直接从旧分支创建新分支,将其公开,然后使用这个新分支? @VelikiiNehochuha,有道理:如果有人继续使用 old_branch 并且分支出现分歧,我会将更改合并到 new_branch。谢谢,会的。 在删除旧的之前创建新的(通过git push -u origin new_branch)。在某些情况下,这无关紧要。在其他情况下,它确实重要,它使“创建新”操作显着更有效率。您可能想知道何时(以及为什么)它更有效:答案是,如果删除旧名称会触发服务器端 git gc 抛出可从旧名称访问的提交,那么您随后创建新名称的推送必须重新发送 git gc 刚刚扔掉的所有提交。如果你先创建,所有的提交都会被保留。 【参考方案1】:

鉴于您声明的目标是在本地和远程重命名分支 - 这意味着本地和远程应该最后是 anew_branch 指向 old_branch 之前指向的位置,并且应该不再是old_branch - 那么您列出的程序和任何程序一样好。

这是因为当另一个开发人员获取时,他们的 repo 不会“知道”/受用于到达该最终状态的命令的影响。他们只会看到old_branch 消失了,并且有一个名为new_branch 的新分支。

现在,这样的 repos 不会自动删除他们的 origin/old_branch ref;默认情况下,除非/直到使用 fetch--prune 选项,否则他们会将其保留在原处。这也意味着他们可能会重新推送它(没有意识到你已经删除了它)。

换句话说,你不会混淆git,但你可能混淆队友 - 所以你需要与团队沟通以确保人们知道发生了什么。

【讨论】:

【参考方案2】:

我建议创建一个new_branch 并通知其他开发人员使用新分支(并删除old_branch)。

如果开发人员继续使用旧分支,您可以将他们的提交合并到new_branch,直到他切换到new_branch

【讨论】:

以上是关于安全地重命名远程源分支[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Flyway 脚本中安全地重命名 MySQL 表名

在本地和远程重命名 Git 分支? [复制]

递归地重命名字典列表中的字典键

根据上一行有条件地重命名值

Git查看删除重命名远程分支和tag

Git查看删除重命名远程分支和tag