如何在本地删除一个分支?

253

我的代码库中有一个主分支和一个开发分支。我想从我的电脑中删除主分支,以免意外提交到它(这种情况已经发生过……)。

这里有一些关于如何删除本地远程分支的问题,但我没有找到如何仅删除本地分支的方法。

有一个答案建议使用以下命令:

git branch -d local_branch_name

但我尝试过了,在GitHub应用中该分支仍然显示出来。


那个命令的输出是什么?你在哪个分支上?它在控制台上显示的怎么样? - SLaks
@SLaks 我的问题中有一个类型错误。在控制台中,它实际上确实显示分支已被删除,但在 GitHub 应用程序中(即使重新启动后),该分支和提交仍然可见。输出为 Deleted branch master (was e8a8e29). - Nate
GitHub for Windows也显示远程分支。 - SLaks
@SLaks,那么在本地删除分支后,如果我在GitHub for Windows应用程序中点击它,它只是重新克隆吗?我想防止自己直接对主分支进行更改。 - Nate
我理解你想要做的事情——保护你的远程主分支。如果你(或者你的GIT管理员)创建规则来防止未经授权的人推送到主分支,那会更好。 - davidhartman00
9个回答

208

强制删除本地分支:

$ git branch -D <branch-name>

[注意]:

-D--delete --force 的快捷方式。



15
如果我删除一个已设置上游分支的本地分支,然后进行普通推送,它不会删除远程分支,对吗? - Fueled By Coffee
3
这是这个问题的答案。 - Benyamin Jafari

137

根据你的评论,我认为我了解你想做什么:你希望本地存储库既没有普通本地分支master,也没有远程跟踪分支origin/master,即使你克隆的存储库——github的版本——有一个master本地分支,你不想从github版本中删除它。

你可以通过在本地删除远程跟踪分支来实现这一点,但每次你要求git将本地存储库与远程存储库同步时,它都会简单地返回,因为你的git会询问对方的git“你有哪些分支”,然后对方会回答“我有master”,所以你的git会重新创建origin/master,让你的存储库拥有与他们相同的内容。

要使用命令行界面在本地删除远程跟踪分支:

git branch -d -r origin/master

但是,当再次同步时,它将重新出现。可以通过操作remote.origin.fetch来击败它,但最好还是有足够的纪律不在本地创建或修改master


相关:如何在git中克隆单个分支? - Tobias Kienzler

33
据我所理解,您不小心将提交添加到本地主分支,并且尚未推送这些更改。现在,您希望取消更改,删除本地更改,并从远程创建新的主分支。 您可以重置更改并重新加载来自远程服务器的主分支:
git reset --hard origin/master

16

Windows版的Github应用程序显示存储库的所有远程分支。如果您使用$ git branch -d [branch_name]本地删除了分支,则远程分支仍然存在于您的Github存储库中,并且无论如何都会在Windows Github应用程序中显示。

如果您想完全删除该分支(包括远程分支),请将上述命令与$ git push origin :[name_of_your_new_branch]结合使用。警告:此命令会删除所有现有分支,可能会导致代码丢失。请小心,我认为这不是您想要做的。

但是,每次您删除本地分支更改时,远程分支仍将出现在应用程序中。如果您不想继续进行更改,请忽略它并不要单击,否则您可能会克隆存储库。如果您还有任何问题,请告诉我。


13

使用以下命令删除分支后:

git branch -d BranchName

要删除远程存储库中不再存在的分支,请使用:

git fetch -p

-p 表示 prune,用于从本地仓库中删除在远程不存在的分支。


3
您可以使用Git GUI在Windows上删除多个分支:
  1. 进入您的项目文件夹
  2. 打开Git Gui: enter image description here
  3. 点击“Branch”:
  4. enter image description here
  5. 现在选择“Delete”:
  6. enter image description here
  7. 如果您想删除所有分支,无论它们是否合并,请勾选“Always(不执行合并检查)”: enter image description here

2

您需要切换到另一个分支并尝试相同的操作。

git branch -d


2
这是一个答案吗?还是一个澄清问题?或者只是一个简单的问题?它太短了,我无法确定。您想详细说明吗? - Yunnosch

2
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D

简单易懂。它将删除除你正在工作的“develop”和“master”之外的所有内容。


1
根据您的标签,我假设您正在使用Github。为什么不为您的主分支创建一些分支保护规则呢?这样,即使您尝试推送到主分支,它也会被拒绝。

1)转到Github上您的存储库的“设置”选项卡。

2)单击左侧菜单中的“分支”。

3)点击“添加规则”

4)为分支模式输入“master”。

5)勾选“要求在合并之前进行拉取请求审查”

我还建议您为dev分支执行相同操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接