在Git中重命名远程分支后,如何更新本地引用?

时间:2018-06-19 19:23:54

标签: git

如果团队renames a remote branch中的一位开发人员也签出了另一位开发人员,那么第二位开发人员更新本地存储库的最佳方法是什么呢? >

2 个答案:

答案 0 :(得分:2)

如您的链接所述,没有“重新分支”;因此,第一个开发人员要做的是创建一个新分支,然后从正在使用它的其他用户下删除旧分支。[p]

可以通过手动处理与分支相关的配置设置等来独立更新每个本地存储库-甚至更危险的是,直接破解元数据...但是我更喜欢这样的解决方案:

鉴于old-branch-name已删除,new-branch-name已创建以替换它:

1)在本地获取并创建新分支。

git fetch -p
git checkout new-branch-name

请注意-p的{​​{1}}参数,这将导致fetch的远程跟踪引用消失(因为old-branch-name不在远程上)。 / p>

假设old-branch-name尚未使用(无论是在本地存储库中,还是在其配置的其他远程数据库中),这将创建具有适当跟踪的新分支,并将其检出。然后

new-branch-name

现在,有许多不同的情况会导致这一点,我们可以遍历所有可能涉及的问题,但是最重要的是,这使得分支看起来像一直是git reset --hard old-branch-name git branch -D old-branch-name

例如,如果您以前有过

new-branch-name

x -- A <--(origin/old-branch-name) \ B <--(old-branch-name) 的{​​{1}}副本仍在origin,那么new-branch-name会给您

A

fetch -px -- A <--(origin/new-branch-name) \ B <--(old-branch-name) checkout之后,您拥有

reset

如果branch -D的远程副本已升级(例如,已升级到x -- A <--(origin/new-branch-name) \ B <--(new-branch-name) ),则提取将为您提供

new-branch-name

最后你会拥有

C

这与您的本地分支位于远程站点后面的正常情况没什么不同。

就像我说的那样,有很多情况,因此,如果有特别关注的问题,请随时发表评论,我可以添加它。但是无论如何,无论您有没有“重命名”的集成状态,这都应该用新分支有效地替换旧分支。


[1]这并不是说如果团队同意的流程要求这样做,那肯定是错误的事情;但这确实意味着这样做的人应该负责传达变更,自然而然的结果是有人 将以其原始名称重新创建分支-几乎可以肯定会创建不同的分支-否则。

答案 1 :(得分:1)

如果您在分支机构上没有任何工作或出于其他原因保存名称,通常可以采用Mark Adelsberger's answer中的方法删除旧名称。

如果您要做有理由将其重命名,则可以通过两个命令来完成它:

  • 重命名分支:git branch -m old-name new-name
  • 将上游更改为新名称:git branch --set-upstream-to=origin/new-name new-name

您可以按其他顺序执行这些操作,只需在当时使用正确的名称即可。