![](/img/trans.png)
[英]Creating a git branch for previous commits: what's the best way to do it?
[英]After a git branch rename, what's the best way to notify everyone and update their local machines to match it?
我有一个带有分支feature
和master
的仓库。
在我的机器上,我通过以下步骤重命名了feature
:
检查了我的本地分支git checkout feature
使用git branch -m beta
beta
分支重命名为 beta
推送beta
分支并重置上游git push origin -u beta
删除feature
远程分支git push origin --delete feature
现在我的本地机器和 GitHub 都同步了,但是在他们的远程机器上工作的其他人仍然有feature
分支。 当他们运行git branch
时,他们会看到列出的master
和feature
。 当他们运行git pull
时,他们收到消息“您的配置指定与远程的 ref 'refs/heads/feature' 合并,但没有获取这样的 ref。”
几个问题:
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.