git 2018:有没有办法在远程为所有用户重命名分支?

时间:2018-04-13 00:28:02

标签: git

我知道分支重命名实际上只是删除旧分支并重新创建一个新分支。

现在是否有一项功能允许此进程传播给所有用户,即使用一些guid而不是分支名称?

例如,如果另一个人有一个跟踪分支到origin / a并且我将其重命名为origin / b,我希望有一个功能,他的跟踪分支将在下次获取时自动成为origin / b。

1 个答案:

答案 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/adidgeridoo设置为其上游的分支,我的origin/a仍然将didgeridoo设置为其上游,即使我选择了origin/a选项,但我不再拥有--prune

在任何情况下,这里的基本指导原则是每个用户都有自己的分支名称,对任何远程永远不会的任何更改都会影响他们。 (对于origin/a个克隆,这个特殊的原理完全不在窗口,但镜像通常是裸露的,并且没有完成任何工作。)