繁体   English   中英

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

[英]How do I update my local refs when a remote branch has been renamed in Git?

如果团队中的一个开发人员重命名了另一个开发人员也已签出的远程分支 ,那么第二个开发人员更新本地存储库的最佳方法是什么,从而避免他们意外地将其推入旧的分支名称?

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

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

鉴于已删除old-branch-name并创建了new-branch-name来替换它:

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

git fetch -p
git checkout new-branch-name

注意fetch-p参数,它将导致old-branch-name的远程跟踪引用消失(因为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)

并且new-branch-nameorigin副本仍位于A ,则fetch -p给您

x -- A <--(origin/new-branch-name)
      \
       B <--(old-branch-name)

checkoutresetbranch -D

x -- A <--(origin/new-branch-name)
      \
       B <--(new-branch-name)

如果new-branch-name的远程副本已经升级(例如,到C ),则获取将为您提供

x -- A -- C <--(origin/new-branch-name)
      \
       B <--(old-branch-name)

最后你会

x -- A -- C <--(origin/new-branch-name)
      \
       B <--(new-branch-name)

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

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


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

如果您在分支机构上没有任何工作或其他原因要保存名称,通常可以按照Mark Adelsberger的回答删除旧名称。

如果确实有理由要重命名,则可以使用两个命令来完成它:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM