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


22

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

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

Answers:


34

在Git中,分支只是提交的有序列表(又名:签到)。对于新用户而言,可能有些令人困惑的是分支不需要名称(尽管在大多数情况下,您需要一个名称)。而且任何特定分支都没有什么特别的地方(该master分支只是初始化存储库时为您创建的默认分支)。

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

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

git branch -d master

但是,如果您无法执行此操作,则仍然可以在本地计算机上执行此操作。该git branch命令具有-r影响远程存储库的选项。换句话说,运行以下命令应该可以工作:

git branch -d -r master

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


顺便说说; 如果您(或其他任何人)是Git的新手,我强烈建议您阅读John Wiegley的Bottom Up中的Git。即使在发现本文之前我曾经单独使用过Git,但直到阅读之前我才真正理解它的工作原理。这很有用!


3
自从我写了最初的评论一段时间以来,git的行为发生了一些变化。从git 1.7.12开始,git branch -d -r master不再删除远程分支,而是删除本地副本对远程分支的了解。下次您git fetch,分支将回来!相反,您需要运行git push origin :master。本质上,您在这里所做的是将一个空分支(空分支名称位于的左侧:)推到远程分支的顶部(分支名称位于右侧:),以有效地将其删除。
mparker17 2012年

还应注意,克隆存储库时,通常默认情况下签出master。这取决于您要克隆的存储库中的HEAD ref。因此,在删除master之后,请确保HEAD指向您想要作为默认分支的分支。
Zitrax

从下至上Git的链接已死,但似乎是您所指的文字(?)您能否确认并也许更新答案中的链接?
OR Mapper

或Mapper:这就是我要指的文字:谢谢您的新链接!我已经更新了答案中的链接。
mparker17 '17

4

master是git的默认分支。我不知道为什么当git告诉您离master太远时,它对您如此可怕,但是如果您要删除远程存储库上的分支,仅在本地删除它是不够的。尝试以下方法:

git push origin :master

这不会将任何内容(冒号之前的部分)推送到原始服务器并覆盖主服务器。换句话说,它应该远程删除master分支。


我得到:远程:错误:拒绝删除当前分支:refs / heads / master到github.com ***。git![远程拒绝]主节点(禁止删除当前分支)错误:无法将某些引用推送到“ github.com ***。git”
Totty.js 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.