1

我重命名了一个本地分支,在远程删除了相同的分支,将新名称推送到远程并设置跟踪如下:

git checkout my_branch
git branch -m my_branch feature/my_branch         # rename
git push origin :my_branch                        # delete on remote
git push --set-upstream origin feature/my_branch  # push and set tracking

我已经为 20 多个分支(通过脚本)完成了此操作,并且没有错误。

贡献者git fetch --prune已经更新了他们的本地分支(重命名并设置了新的跟踪分支)。

一天后(星期五),没有任何新的提交被推送,旧的origin/my_branch重新出现origin/feature/my_branch. 没有人可以通过使用旧的跟踪分支完成的新提交和推送。所以,我已经删除了origin/my_branch.

今天(周末之后)origin/my_branch再次出现在相同的旧提交(日期为星期四)origin/feature/my_branch上。

我不明白 Git(垃圾收集器)如何以及为什么可以恢复已删除的分支,但可能原因在于Gitblit(它处理我的远程管理)方面?

4

1 回答 1

0

除非以下其中一项是负责任的,否则这没有任何意义

  • 您团队中的其他人正在再次推动这个分支
  • 外部代码(钩子、脚本、cron 等)正在创建此分支。
  • 它是定义的默认分支,Gitblit因此它被重新创建

所有这些之间的共同点是某人(人或脚本)正在创建/推送此代码。


最有可能发生的是您团队中的其他人再次推动这个分支。

至于 git version <2,当您在git pull/push没有指定远程或分支的情况下编写时,它将pull/push是您的所有分支。它已更新到第 2 版。


Git v2.0 发行说明

当 "git push [$there]" 没有说要推送什么时,到目前为止我们一直使用传统的 "匹配" 语义(只要那里已经有同名的分支,你所有的分支都被发送到远程) . 在 Git 2.0 中,现在默认是“简单”语义,它推动:

  • 只有当前分支到具有相同名称的分支,并且只有当当前分支设置为与该远程分支集成时,如果您推送到与您获取相同的远程;或者

  • 只有当前分支到具有相同名称的分支,如果您要推送到您通常不从中获取的远程位置。

您可以使用配置变量“push.default”来更改它。例如,如果您是一个想要继续使用“匹配”语义的老手,您可以将变量设置为“匹配”。阅读文档以了解其他可能性。

于 2015-06-01T12:54:54.903 回答