繁体   English   中英

在 git 分支重命名之后,通知每个人并更新他们的本地机器以匹配它的最佳方法是什么?

[英]After a git branch rename, what's the best way to notify everyone and update their local machines to match it?

我有一个带有分支featuremaster的仓库。

在我的机器上,我通过以下步骤重命名了feature

  1. 检查了我的本地分支git checkout feature

  2. 使用git branch -m beta beta分支重命名为 beta

  3. 推送beta分支并重置上游git push origin -u beta

  4. 删除feature远程分支git push origin --delete feature

现在我的本地机器和 GitHub 都同步了,但是在他们的远程机器上工作的其他人仍然有feature分支。 当他们运行git branch时,他们会看到列出的masterfeature 当他们运行git pull时,他们收到消息“您的配置指定与远程的 ref 'refs/heads/feature' 合并,但没有获取这样的 ref。”

几个问题:

  1. 我该如何解决这个问题?
  2. 告诉其他人分支已重命名并且他们也应该在本地计算机上更新它的最佳方式是什么?
  3. 幸运的是,我正在与这个项目一起工作的人没有正在进行的工作/对feature进行阶段性更改,但如果他有,考虑到他的机器不知道分支重命名,这些人会去哪里,并且会尝试推送它远程使用旧名称?

我希望您的团队在此分支重命名方面保持同步。 反正……他们纠正这种情况应该不会太难。

首先,他们应该使用 --prune 获取,以便远程feature分支远离他们看到的关于远程的内容:

git fetch --prune origin # or adjust to the remote that each one likes to name it

如果他们有一个,那不会删除他们的本地feature分支(我不会为共享分支创建本地分支)。 如果他们想删除本地的,他们需要运行git branch -D feature

然后,他们需要设置所有使用 origin/feature 的分支以使用 origin/beta 作为上游。 这可以很容易地完成

git branch --set-upstream-to=origin/beta some-local-branch

在使用feature每个本地分支上。 通过使用检查所有本地分支上游的脚本,这可能更简单。 也许是这样的:

git branch | for each branch; do
    upstream=$(git rev-parse --abbrev-ref "$branch"@{u})
    if [ "$upstream" == "origin/upstream" ]; then
        git branch --set-upstream-to=origin/beta $branch
    fi
done

这应该足够了,以便在拉取时,他们不会收到有关丢失分支的错误。

关于第 2 点:任何必要的手段....如果您不同步,这并不是世界末日,但是如果您不告诉人们这件事,那么会在中央存储库中看到一个新feature分支不应该感到惊讶......如果您是回购的负责人,也不会被淹没。 所以,提前计划,让人们知道(通常的意思是:邮件,会议,你说的)。

关于第 3 点,它们 go 无处可去……它们仍然在原处……也许对 git 中的分支如何工作进行一些解释将有助于了解正在发生的事情。 git 中的分支只是指向修订的指针 你可以有多个分支指向同一个版本......并且这些指针可以随意移动。 所以....当您决定将feature重命名为beta时,创建的所有内容都是指向同一修订beta的指针,然后您删除了feature ...但这不会与分支历史记录的基础修订版混淆.

所以....如果重命名是在您工作期间发生的,那不会有什么不同。 您为您的分支设置了新的上游(如果您设置了origin/feature ),它将继续工作而不会出现问题。

暂无
暂无

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

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