我知道分支重命名实际上只是删除旧分支并重新创建一个新分支。
现在是否有一项功能允许此进程传播给所有用户,即使用一些guid而不是分支名称?
例如,如果另一个人有一个跟踪分支到origin / a并且我将其重命名为origin / b,我希望有一个功能,他的跟踪分支将在下次获取时自动成为origin / b。
答案 0 :(得分:2)
我知道分支重命名实际上只是删除旧分支并重新创建一个新分支。
也许,或许不是。如果使用git branch -m
重命名自己的存储库中的分支,则旧名称的reflog将成为新名称的reflog;如果使用git branch newname oldname && git branch -D oldname
创建指向同一提交的新名称,则删除旧名称,reflog消失。所以这意味着答案是"不是" - 但见下文。
现在是否有一项功能允许此进程传播给所有用户,即使用一些guid而不是分支名称?
您的分支机构名称独立于我的分支机构名称,反之亦然,因此,绝对不是。即使我将您的存储库设置为origin
之类的遥控器,我的master
也不是您的master
。我的master
完全独立于您的master
。我通过我的master
记住了您的origin/master
。
例如,如果另一个人有一个跟踪分支到origin / a并且我将其重命名为origin / b,我希望有一个功能,他的跟踪分支将自动成为原点/ b下一次获取。
虽然这可能是一个很好的功能,但它不存在。当我git fetch origin
时,我将您的b
添加到我的origin/*
名称集合中。如果我没有选择--prune
选项,则会保留我之前origin/a
的{{1}}副本。如果我 选择了a
选项,我的Git会自动删除我的--prune
(及其reflog!)。那么,如果不是所有这些分支 - 变成远程跟踪名称 - 这是不同的东西,这意味着重命名分支真正 等同于首先创建一个新名称,然后删除旧的。 (顺序很重要,否则提交可能会在两个操作之间进行垃圾收集。)
同时,如果我有一个名为origin/a
且didgeridoo
设置为其上游的分支,我的origin/a
仍然将didgeridoo
设置为其上游,即使我选择了origin/a
选项,但我不再拥有--prune
。
在任何情况下,这里的基本指导原则是每个用户都有自己的分支名称,对任何远程永远不会的任何更改都会影响他们。 (对于origin/a
个克隆,这个特殊的原理完全不在窗口,但镜像通常是裸露的,并且没有完成任何工作。)