题 如何在本地和远程删除Git分支?


我想在本地和我的远程项目fork上删除一个分支 GitHub上

尝试删除远程分支失败

$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.

$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.

$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).

$ git push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.

我需要做些什么才能成功删除 remotes/origin/bugfix 在本地和GitHub分支?


13843
2018-01-05 01:12


起源


主持人注意:如果您打算回答此问题,请注意已发布40个答案。您的新答案会增加任何重要价值吗? - Robert Harvey♦
注意:对于Git 2.5+(2015年第二季度),确切的消息将是“deleted remote-tracking branch“:见 github.com/git/git/commit/... - VonC


答案:


执行摘要

$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>

请注意,在大多数情况下,远程名称是 origin

删除本地分支

要删除 本地 分支使用以下之一:

$ git branch -d branch_name
$ git branch -D branch_name

注意: 该 -d option是别名 --delete,如果已经在其上游分支中完全合并,则仅删除分支。你也可以使用 -D,这是别名 --delete --force,删除分支“无论其合并状态如何”。 [资源: man git-branch]

删除远程分支[2017年9月8日更新]

作为 Git v1.7.0,你可以删除一个 远程 分支使用

$ git push <remote_name> --delete <branch_name>

这可能比记住更容易记住

$ git push <remote_name> :<branch_name>

这是添加的 Git v1.5.0 “删除远程分支或标记。”

开始 Git v2.8.0 你也可以用 git push 随着 -d 选项作为别名 --delete

因此,您安装的Git版本将决定您是否需要使用更简单或更难的语法。

删除远程分支[原始答案从2010年1月5日]

从第3章开始 亲Git 作者:Scott Chacon:

删除远程分支

假设您已经完成了远程分支 - 比如说,您和您的协作者已经完成了一项功能并将其合并到您的远程主分支(或您的稳定代码行所在的任何分支)。您可以使用相当钝的语法删除远程分支 git push [remotename] :[branch]。如果要从服务器中删除serverfix分支,请运行以下命令:

$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
 - [deleted]         serverfix

繁荣。您的服务器上没有更多分支。您可能想要熟悉此页面,因为您需要该命令,并且您可能会忘记语法。记住这个命令的方法是回忆一下 git push [remotename] [localbranch]:[remotebranch] 我们过早谈过的语法。如果你离开了 [localbranch] 部分,然后你基本上是在说,“不要在我这边做任何事情,让它成为现实 [remotebranch]“。

我发了 git push origin :bugfix 它工作得很漂亮。斯科特查孔是对的 - 我想要 狗耳朵 该页面(或通过在Stack Overflow上回答这个问题,实际上是狗耳朵)。

然后你应该在其他机器上执行它

git fetch --all --prune

传播变化。


17234
2018-01-05 01:13



如果你知道语法 git push origin local_branch:remote_branch,然后删除分支的语法 git push origin :remote_branch 有点可爱之前有一个空白 : - Marc-André Lafortune
别忘了做一个 git fetch --all --prune 删除服务器上的远程分支后,在其他计算机上。 |||删除本地分支后 git branch -d 并删除远程分支 git push origin --delete 其他机器可能仍然有“过时的跟踪分支”(看他们这样做 git branch -a)。要摆脱这些呢 git fetch --all --prune。 - Trevor Boyd Smith
除了@ TrevorBoydSmith之外 git branch -a 要查看所有分支,您也可以使用 git branch -r 仅查看远程分支。也可以看看 git remote show origin - 资源: gitready.com/intermediate/2009/02/13/list-remote-branches.html - Sandra
我不得不跑 git branch -D Branch_Name 摆脱当地的分支机构 - Kolob Canyon
@KolobCanyon如果分支尚未合并到另一个分支,则只需使用-D。 - BTRUE


马修的答案非常适合删除 远程 我也很欣赏这些解释,但要简单区分两个命令:

删除一个 当地分公司 从你的机器:

git branch -d {the_local_branch} (使用 -D 而是强制删除分支而不检查合并状态)

删除一个 远程分支 从服务器:

git push origin --delete {the_remote_branch}

参考: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote


2872
2018-06-12 14:51



@megido好吧 -D 强制删除, -d 如果尚未合并,则会发出警告。 - TankorSmash
如果您的本地分支未与master合并并运行 'git branch -d your_branch 然后你会错误的 error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'. - geeks
我建议使用-d而不是-D,因为它更安全。如果-d由于未合并的提交而失败,那么你需要评估它,如果它绝对可以删除,那么使用-D。 - rooby
其他具有已删除远程分支的存储库克隆的其他人应该运行 git remote prune <name>(例如。 git remote prune origin)以便在本地删除远程不再存在的陈旧分支。 - code_dredd
如果您的分支在您的分支中(并非总是来源),请使用正确的存储库。例如git push myRepo:mrbranchtodelete - Dhanuka777


简短的答案

如果您想要更详细地解释以下命令,请参阅下一节中的长答案。

删除远程分支:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0

删除本地分支:

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches

删除本地远程跟踪分支:

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p      # Shorter

长答案:有3个不同的分支要删除!

当您在本地和远程处理删除分支时,请记住这一点 涉及3个不同的分支

  1. 当地分公司 X
  2. 远程原点分支 X
  3. 本地远程跟踪分支 origin/X 跟踪远程分支 X

Visualization of 3 branches

使用的原始海报

git branch -rd origin/bugfix

这只删了他的 本地远程跟踪分支  origin/bugfix,而不是实际的远程分支 bugfix 上 origin

Diagram 2

删除该实际的远程分支, 你需要

git push origin --delete bugfix

Diagram 3

额外细节

以下部分介绍了删除远程和远程跟踪分支时要考虑的其他详细信息。

推送删除远程分支也会删除远程跟踪分支

请注意,删除远程分支 X 从命令行使用a git push  还将删除本地远程跟踪分支  origin/X,所以没有必要修剪过时的远程跟踪分支 git fetch --prune 要么 git fetch -p虽然如果你这样做也不会受伤。

您可以验证远程跟踪分支 origin/X 也通过运行以下命令删除:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

修剪过时的本地远程跟踪分支origin / X.

如果您没有删除远程分支 X 从命令行(如上所述),然后您的本地仓库仍将包含(一个现已过时的)远程跟踪分支 origin/X。例如,如果您通过GitHub的Web界面直接删除了远程分支,就会发生这种情况。

删除这些过时的远程跟踪分支(从Git版本1.6.6开始)的典型方法是简单地运行 git fetch 随着 --prune 或更短 -p请注意,这将删除远程不再存在的任何远程分支的所有过时的本地远程跟踪分支

git fetch origin --prune
git fetch origin -p # Shorter

这是相关的引用 1.6.6发行说明 (强调我的):

学会了“git fetch”  --all 和 --multiple选项,运行从中获取   许多存储库,和 --prune 删除远程跟踪的选项   陈旧的分支。  这些使“git远程更新”和“git   远程修剪“不太必要(没有计划删除”遥控器   尽管如此,更新“也不是”远程修剪“。

替代上述自动修剪过时的远程跟踪分支

或者,不要修剪过时的本地远程跟踪分支 git fetch -p你可以避免进行额外的网络操作 只需用手动删除分支即可 --remote 要么 -r 标志:

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

也可以看看


1641
2018-05-30 18:32



从您的插图中,我可以看到有本地克隆仓库和远程原始仓库。所以至少有两个物理分支。要删除的第三个分支在哪里?第三个分支只是指向本地克隆存储库中的提交的指针吗? - huggie
@huggie这非常正确。 Git中的分支只是附加到提交的书签。所以在上面的图表中,有 X 和 origin/X 书签在本地克隆(2个分支),然后有 X 在遥控器上(制作3个分支)。
远程跟踪分支的+1。当您克隆其他人的分支时,此分支是导致问题的原因。它会继续跟踪您的提交并询问您是否要推送到该人员的分支机构。 - Kermit_ice_tea


删除分支的步骤:

删除 远程分支:

git push origin --delete <your_branch> 

删除 当地分公司,你有三种方式:

1: git branch -D <branch_name> 

2: git branch --delete --force <branch_name>  //same as -D

3: git branch --delete  <branch_name>         //error on unmerge

说明: 好的,请解释一下这里发生了什么!

简单地做 git push origin --delete 至 仅删除您的远程分支,在末尾添加分支的名称,这将删除并同时将其推送到远程...

也, git branch -D,它只是删除本地分支 只要!...

-D 代表 --delete --force 这将删除分支,即使它没有合并(强制删除),但你也可以使用 -d 这代表 --delete 哪个抛出分支合并状态的错误...

我还创建了下面的图像来显示步骤:

delete a remote and local branch in git


927
2018-06-27 13:13



git branch -a 将显示本地和远程分支。它将为您的图表介绍提供帮助。 - LoranceChen
请注意,如果要在要删除的分支上进行设置,则需要在删除本地分支之前签出除需要删除分支之外的分支(例如:master)。 - BaDr Amer
[关于主题]你是如何创造上述惊人的形象的? - Lucas Caton


您还可以使用以下命令删除远程分支。

git push --delete origin serverfix

这与做同样的事情

git push origin :serverfix

但它可能更容易记住。


703
2017-10-27 22:22



......使用更安全:O - cst1992
你忘记了删除本地分支的部分,可以通过以下方式完成: git branch -d <local_branch> 要么 git branch -D <local_branch> 强制删除 - Amit Dash


如果要删除分支,请首先签出除要删除的分支以外的分支。

git checkout other_than_branch_to_be_deleted

删除本地分支:

git branch -D branch_to_be_deleted

删除远程分支:

git push origin --delete branch_to_be_deleted

344
2017-10-07 13:52





提示:使用时删除分支

git branch -d <branchname>    # deletes local branch

要么

git push origin :<branchname> # deletes remote branch

只删除引用。即使分支在遥控器上实际被删除,对它的引用仍然存在于团队成员的本地存储库中。这意味着对于其他团队成员,删除的分支在执行时仍然可见 git branch -a

要解决此问题,您的团队成员可以修剪已删除的分支

git remote prune <repository>

这通常是 git remote prune origin


329
2017-11-07 13:02



你应该澄清以上内容 git push operation删除本地分支 和 远程分支。 - Annika Backstrom
注意 git remote prune 删除过时的远程跟踪分支是一种有点过时的方法,更新的方法就是使用它 git fetch --prune 要么 git fetch -p。
@RRMadhav,确实你删除它后不会看到删除的分支,因为在本地将删除对远程分支的引用。您团队中已签出该分支的任何其他人仍将拥有该引用,并且除非他们修剪分支,否则仍会看到它。 - pfrenssen


git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>

247
2017-10-24 17:36



注意 -D  军队 删除。它总是更好用 -d,这将提醒你是否需要做一些危险的事情。 - Jonathon Reinhart
ahahah :)这取决于你:如果你想看到git哭,请使用-d,如果你想哭,请使用-D。 - Felipe