如何在本地和远程删除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>

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

删除本地分支

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

$ 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] 。 如果你想从服务器上删除你的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个不同的分支

  • 本地分支X
  • 远程原点分支X
  • 跟踪远程分支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
    

    修剪已过时的本地远程追踪分支原点/ 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标志手动删除分支来避免额外的网络操作:

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

    也可以看看

  • git-branch(1)手册页。
  • git-fetch(1)手册页。
  • Pro Git§3.5 Git分支 - 远程分支。
  • 链接地址: http://www.djcxy.com/p/5.html

    上一篇: How do I delete a Git branch both locally and remotely?

    下一篇: How to undo the most recent commits in Git?