![](/img/trans.png)
[英]How do I checkout existing remote branch with git worktree - Not in local refs
[英]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-name
的origin
副本仍位于A
,则fetch -p
给您
x -- 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
),则获取将为您提供
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.