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

我想在本地和我的远程项目分叉上删除一个分支在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. 

在本地和GitHub上成功删除remotes/origin/bugfix分支需要做什么不同?

执行摘要

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

删除本地分支

要删除本地分支,请使用以下其中一项:

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

注: -d选项是--delete的别名,只有在分支已经在其上游分支中完全合并时才会删除。 您也可以使用-D ,它是--delete --force的别名,它会删除分支,而不考虑它的合并状态。 [来源: man git-branch ]

删除远程分支[更新date: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日]

从Scott Chacon的Pro Git第3章:

删除远程分支

假设你已经完成了一个远程分支 – 比方说,你和你的协作者已经完成了一个function,并将它合并到你的远程主分支(或者你的稳定的代码行所在的任何分支)。 您可以使用相当钝的语法来删除远程分支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 ,效果很好。 Scott Chacon是对的,我会想要听到那个页面(或者通过在Stack Overflow上回答这个问题来虚拟狗耳朵)。

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

 git fetch --all --prune 

传播变化。

马修的答案是伟大的删除远程分支机构,我也欣赏的解释,但要简单地区分这两个命令:

从您的机器上删除本地分支

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 :<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 ,而不是origin远程分支错误bugfix

图2

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

 git push origin --delete bugfix 

图3

额外细节

以下各节将介绍删除远程和远程分支机构时要考虑的其他详细信息。

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

请注意,使用git push从命令行中删除远程分支X 也将删除本地远程跟踪分支 origin/X ,因此不需要使用git fetch --prunegit fetch -p修剪过时的远程跟踪分支git fetch -p ,尽pipe如果你做了它也不会有什么伤害的。

您可以通过运行以下命令来validation远程跟踪分支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 

修剪已过时的本地远程追踪分支源/ 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选项删除过时的远程跟踪分支。 这些使得“git remote update”和“git remote prune”变得不那么必要(虽然没有计划去除“远程更新”,也没有“远程修剪”)。

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

或者,不要通过git fetch -p修剪已过时的本地远程跟踪分支,而是通过使用--remote-r标志手动删除分支来避免额外的networking操作

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

也可以看看

  • git-branch(1)手册页 。
  • git-fetch(1)手册页 。
  • Pro Git§3.5 Git分支 – 远程分支 。

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

 git push --delete origin serverfix 

与之相同的是

 git push origin :serverfix 

但它可能更容易记住。

删除分支的步骤:

删除远程分支:

 git push origin --delete <your_branch> 

删除本地分支:

 git branch -D <branch_name> 

解释一下:好的,就解释一下发生了什么事吧!

只要做git push origin --delete – 删除远程分支,在最后添加分支的名字,这会删除并同时推送到远程…

另外, git branch -D ,它只是删除本地分支Only !…

-D代表--delete --force ,它会删除分支,即使它没有合并(强制删除),但是你也可以使用-d代表--delete ,它会引起分支合并状态的错误。

我也创build下面的图像来显示步骤:

在git中删除一个分支

如果你想删除一个分支,首先检查到分支以外的分支被删除。

 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 <branchname> # deletes local branch 

要么

 git push origin :<branchname> # deletes remote branch 

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

为了解决这个问题,你的团队成员可以修剪被删除的分支

 git remote prune <repository> 

这通常是git remote prune origin

 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 

将有效地使远程存储库看起来像存储库的本地副本(本地磁头,遥控器和标签在远程镜像)。

我在Bash设置中使用以下内容:

 alias git-shoot="git push origin --delete" 

那么你可以打电话给:

 git-shoot branchname 

自2013年1月以来,GitHub在“分支”页面的每个分支旁边都有一个删除分支button。

相关的博客文章: 创build和删除分支

如果你想用一个命令来完成这两个步骤,你可以通过在~/.gitconfig添加下面的内容来为它创build一个别名:

 [alias] rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f" 

或者,您可以使用命令行将其添加到您的全局configuration中

 git config --global alias.rmbranch \ '!f(){ git branch -d ${1} && git push origin --delete ${1}; };f' 

注意 :如果使用-d (小写字母d),分支只有在合并后才会被删除。 要强制删除发生,您将需要使用-D (大写字母D)。

本地删除:

要删除本地分支,您可以使用:

 git branch -d branch_name 

要强制删除分支,请使用-D而不是-d

 git branch -D branch_name 

远程删除:

有两个选项:

 git push origin :branchname git push origin --delete branchname 

我build议你使用第二种方式,因为它更直观。

你也可以使用git remote prune origin来做到这一点:

 $ git remote prune origin Pruning origin URL: git@example.com/yourrepo.git * [pruned] origin/some-branchs 

它修剪并从git branch -r列表中删除远程跟踪分支。

在本地和远程删除分支

  • 结帐到掌握分支

    git checkout master

  • 删除你的远程分支

git push origin --delete <branch-name>

  • 删除您的本地分支

git branch --delete <branch-name>

除了其他答案,我经常使用git_remote_branch工具。 这是一个额外的安装,但它让你一个方便的方式来与远程分支进行交互。 在这种情况下,要删除:

 grb delete branch 

我发现我也经常使用publishtrack命令。

删除分支

假设我们在分支“contact-form”上的工作已经完成,我们已经将它集成到“master”中。 由于我们不再需要,我们可以删除它(本地):

 $ git branch -d contact-form 

并删除远程分支:

 git push origin --delete contact-form 

删除远程分支

git push origin :<branchname>

删除本地分支

git branch -D <branchname>

删除本地分支步骤:

  1. 结帐到另一个分支
  2. 删除本地分支

一个class轮命令删除本地和远程

D=branch-name; git branch -D $D; git push origin :$D

或者将下面的别名添加到你的〜/ .gitconfig ; 用法: git kill branch-name

 [alias] kill = "!f(){ git branch -D \"$1\"; git push origin --delete \"$1\"; };f" 

简单地说:

 git branch -d <branch-name> git push origin :<branch-name> 

现在你可以用GitHub桌面应用程序来做到这一点。

启动应用程序后

  1. 点击包含分支的项目
  2. 切换到您想要删除的分支 切换分支
  3. 从“分支”菜单中select“取消发布…”,将分支从GitHub服务器中删除。 取消发布分支
  4. 从“分支”菜单中select“删除” 分支名称 “…”,将分支从本地计算机上删除(即您当前正在使用的计算机) 删除本地分支
 git push origin --delete branchName 

比较容易记住

 git push origin :branchName 

如果您有一个与远程分支名称相同的标签,这将不起作用:

 $ git push origin :branch-or-tag-name error: dst refspec branch-or-tag-name matches more than one. error: failed to push some refs to 'git@github.com:SomeName/some-repo.git' 

在这种情况下,你需要指定你想删除分支,而不是标签:

 git push origin :refs/heads/branch-or-tag-name 

同样,要删除标签,而不是您将使用的分支:

 git push origin :refs/tags/branch-or-tag-name 

许多其他答案会导致错误/警告。 这种方法是相对的,虽然你可能仍然需要git branch -D branch_to_delete如果没有完全合并到some_other_branch ,这个方法是相对的。

 git checkout some_other_branch git push origin :branch_to_delete git branch -d branch_to_delete 

如果删除远程分支,则不需要远程修剪。 它只是用来获取您正在追踪的回购中最新的遥控器。 我观察到git fetch会添加遥控器,而不是删除它们。 下面是一个例子,当git remote prune origin实际上会做些什么:

用户A执行上述步骤。 用户B将运行以下命令来查看最新的远程分支

 git fetch git remote prune origin git branch -r 

我厌倦了这个答案的谷歌search,所以我采取了类似的方法来回答,crizCraig早些时候发布 。

将以下内容添加到我的Bashconfiguration文件中:

 function gitdelete(){ git push origin --delete $1 git branch -D $1 } 

然后,每当我完成一个分支(例如合并到master ),我在terminal中运行以下内容:

 gitdelete my-branch-name 

…然后从本地删除my-branch-name以及本地。

所有其他答案的混合。 需要Ruby 1.9.3+, 在OS X上testing。

调用这个文件git-remove ,使其可执行,并把它放在你的path。 然后使用,例如, git remove temp

 #!/usr/bin/env ruby require 'io/console' if __FILE__ == $0 branch_name = ARGV[0] if (ARGV[0]) print "Press Y to force delete local and remote branch #{branch_name}..." response = STDIN.getch if ['Y', 'y', 'yes'].include?(response) puts "\nContinuing." `git branch -D #{branch_name}` `git branch -D -r origin/#{branch_name}` `git push origin --delete #{branch_name}` else puts "\nQuitting." end end 
 git push origin :bugfix # Deletes remote branch git branch -d bugfix # Must delete local branch manually 

如果您确定要删除它,请运行

 git branch -D bugfix 

现在清理删除的远程分支运行

 git remote prune origin 

在执行之前

 git branch --delete <branch> 

确保首先通过执行确定远程分支的EXACT名称是什么:

 git ls-remote 

这将告诉你为<branch>值input什么。 ( branch区分大小写!)

我添加了下面的别名到我的.gitconfig文件。 这允许我删除有或没有指定分支名称的分支。 如果没有参数传入,分支名称默认为当前分支。

 [alias] branch-name = rev-parse --abbrev-ref HEAD rm-remote-branch = !"f() { branch=${1-$(git branch-name)}; git push origin :$branch; }; f" rm-local-branch = !"f() { branch=${1-$(git branch-name)}; git checkout master; git branch -d $branch; }; f" rm-branch-fully = !"f() { branch=${1-$(git branch-name)}; git rm-local-branch $branch; git rm-remote-branch $branch; }; f"