Git 分支如何工作?我可以删除主分支吗?

ufk*_*ufk 22 git

我有一个项目,有 2 个分支,开发和生产。我没有使用 master 分支,每次我写git status它时都会告诉我我的分支离 master 有多远。

当我尝试删除 master 分支时git branch -d master,它只会在我的本地存储库中删除它,而不是在远程 git 服务器上。有任何想法吗?

mpa*_*r17 34

在 Git 中,分支只是提交的有序列表(又名:签入)。对新用户来说可能有点混乱的是分支不需要有名字(尽管在大多数情况下你想要一个);并且任何特定分支都没有什么特别之处(该master分支只是在您初始化存储库时为您创建的默认分支)。

您可能已经知道这一点,但是 Git 与其他一些版本控制系统(例如流行的“Subversion”)不同,因为每个“工作副本”(Subversion 语言)都是它自己的存储库……实际上,没有什么特别的任何特定副本的特别之处;除了一个副本已被普遍认可为用于存储最终产品的“规范”副本。

因此,回到您的问题……您在启动本地副本时克隆的“规范”存储库默认包含一个“主”分支;它被困住了。现在,如果您可以访问包含主存储库的计算机,您可以登录并运行:

git branch -d master
Run Code Online (Sandbox Code Playgroud)

但是,如果您无法做到这一点,您仍然可以从您的本地机器上做到这一点。该git branch命令有一个-r影响远程存储库的选项。换句话说,运行以下命令应该可以工作:

git branch -d -r master
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下;我假设它master已完全合并到您的本地副本当前所在的开发历史中。如果您以前从未使用master过(即:您只登记过developmentproduction),则无需担心。但是,如果您(或其他人)一直在将事情签入master,那么您可能会遇到问题。您可以通过更改上述命令中的-dto来强制删除-D;但我强烈建议先检查一下里面有什么master!如果您无权访问远程计算机,则可能无法恢复它!


顺便一提; 如果您(或其他任何人)不熟悉Git,我强烈建议您阅读John Wiegley 的自下而上的 Git。尽管在发现这篇文章之前我自己也使用过 Git,但直到我读到它时我才真正理解它是如何工作的。它非常有用!

  • 自从我写下我的原始评论以来,git 的行为略有改变。从 git 1.7.12 开始,`git branch -d -r master` 不再删除远程分支——它会删除本地副本对远程分支的了解。下次你 git fetch 时,分支会回来的!相反,您需要运行`git push origin :master`。基本上你在这里做的是将一个空分支(`:`左侧的空分支名称)推到远程分支(`:`右侧的分支名称)的顶部,有效地删除它。 (3认同)