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

我想在本地和远程删除分支。

尝试删除远程分支失败

$ 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分支,我应该采取什么措施?

答案

执行摘要

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

请注意,在大多数情况下,远程名称是origin 。在这种情况下,您将必须像这样使用命令。

$ git push -d origin <branch_name>

删除本地分支

要删除本地分支,请使用以下任一方法:

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

注意: -d选项是--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开始,您还可以使用带有-d选项的git push作为--delete的别名。

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

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

从 Scott Chacon 撰写的Pro Git第 3 章中:

删除远程分支

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

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

繁荣。您的服务器上没有更多分支。您可能需要关注此页面,因为您将需要该命令,并且可能会忘记语法。记住此命令的一种方法是调用我们之前介绍的git push [remotename] [localbranch]:[remotebranch]语法。如果您忽略[localbranch]部分,那么您基本上是在说:“什么都不要站在我这一边,并使其成为[remotebranch] 。”

我发布了git push origin: bugfix ,它工作得很漂亮。斯科特 · 查孔(Scott Chacon)是对的,我想提一下该页面(或者实际上是在 “堆栈溢出” 中回答这个问题)。

那你应该在其他机器上执行

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

传播变化。

Matthew 的回答对于删除远程分支非常有用,我也很欣赏其中的解释,但是要在两个命令之间进行简单区分:

要从计算机上删除本地分支

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

简短答案

如果要对以下命令进行更详细的说明,请参阅下一节的详细答案。

删除远程分支:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 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. 跟踪远程分支X的本地远程跟踪分支origin/X

可视化3个分支

使用的原始海报

git branch -rd origin/bugfix

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

图2

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

git push origin --delete bugfix

图3

额外细节

以下各节描述了删除远程和远程跟踪分支时要考虑的其他详细信息。

推动删除远程分支也将删除远程跟踪分支

请注意,使用git push从命令行删除远程分支X 也会删除本地远程跟踪分支 origin/X ,因此不必使用git fetch --prunegit fetch -p修剪过时的远程跟踪分支。 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 起)是简单地使用--prune或更短的-p运行git fetch请注意,这将删除远程上不再存在的任何远程分支的所有过时的本地远程跟踪分支

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

以下是1.6.6 发行说明中的相关报价(重点是我的):

“git fetch” 学习了 --all--multiple选项,可以从许多存储库中运行访--prune ,而--prune选项可以删除过时的远程跟踪分支。这些使 “git remote update” 和 “git remote prune” 的必要性降低(尽管没有计划删除 “remote update” 或“remote prune”)。

以上自动修剪的替代方法,用于过时的远程跟踪分支

另外,除了通过git fetch -p修剪过时的本地远程跟踪分支外, 您还可以通过仅使用--remote-r标志手动删除分支来避免进行额外的网络操作

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

也可以看看

删除分支的步骤:

要删除远程分支:

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 仅删除您的远程分支 ,在末尾添加分支的名称,这将删除并同时将其推送到 remote ...

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

-D代表--delete --force即使未合并也将删除分支(强制删除),但是您也可以使用-d代表--delete代表分支合并状态抛出错误...

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

在git中删除远程和本地分支

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

git push --delete origin serverfix

哪个与

git push origin :serverfix

但是可能更容易记住。

提示:使用删除分支时

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

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

git checkout other_than_branch_to_be_deleted

删除本地分支:

git branch -D branch_to_be_deleted

删除远程分支:

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

这很简单:只需运行以下命令:

要在本地和远程删除 Git 分支,请首先使用以下命令删除本地分支:

git branch -d example

(这里的example是分支名称)

然后使用命令删除远程分支:

git push origin :example

另一种方法是:

git push --prune origin

警告: 这将删除本地不存在的所有远程分支。或更全面地说

git push --mirror

将有效地使远程存储库看起来像该存储库的本地副本(本地头,远程对象和标签在远程上被镜像)。