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

How do I delete a Git branch locally and remotely?

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

尝试删除远程分支失败

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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分支?


执行摘要

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

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

删除本地分支

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

1
2
$ 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开始,可以使用

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

这可能比

1
$ git push <remote_name> :<branch_name>

它是在Gitv1.5.0中添加的,用于删除远程分支或标记。

从Git v2.8.0开始,您还可以使用git push-d选项作为--delete的别名。

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

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

从Scott Chacon出版的《pro-git》第3章:

Deleting Remote Branches

Suppose you’re done with a remote branch — say, you and your collaborators are finished with a feature and have merged it into your remote’s master branch (or whatever branch your stable code-line is in). You can delete a remote branch using the rather obtuse syntax git push [remotename] :[branch]. If you want to delete your server-fix branch from the server, you run the following:

1
2
3
$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Boom. No more branch on your server. You may want to dog-ear this page, because you’ll need that command, and you’ll likely forget the syntax. A way to remember this command is by recalling the git push [remotename] [localbranch]:[remotebranch] syntax that we went over a bit earlier. If you leave off the [localbranch] portion, then you’re basically saying,"Take nothing on my side and make it be [remotebranch]."

我发行了git push origin :bugfix,效果很好。Scott Chacon是对的——我想仔细听那个页面(或者通过在堆栈溢出时回答这个问题,实际上是认真听的)。

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

1
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


简短的回答

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

删除远程分支:

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

删除本地分支:

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

删除本地远程跟踪分支:

1
2
3
4
5
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个不同的分支要删除!

当您处理本地和远程删除分支时,请记住涉及三个不同的分支:

  • 当地分支机构X
  • 远源分支X
  • 跟踪远程分支X的本地远程跟踪分支origin/X
  • Visualization of 3 branches

    使用的原始海报

    1
    git branch -rd origin/bugfix

    只删除了他的本地远程跟踪分支origin/bugfix,没有删除origin上的实际远程分支bugfix

    Diagram 2

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

    1
    git push origin --delete bugfix

    Diagram 3

    其他详细信息

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

    按删除远程分支也会删除远程跟踪分支

    请注意,使用git push从命令行中删除远程分支X也会删除本地远程跟踪分支origin/X,因此不需要使用git fetch --prunegit fetch -p删除过时的远程跟踪分支,但如果您这样做不会造成伤害。

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

    1
    2
    3
    4
    5
    6
    7
    # 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,那么您的本地repo仍将包含(现在已过时的)远程跟踪分支origin/X。例如,如果直接通过Github的Web界面删除远程分支,则可能发生这种情况。

    删除这些过时的远程跟踪分支(因为Git版本1.6.6)的一个典型方法是简单地使用--prune或更短的-p运行git fetch。请注意,这将删除远程上不再存在的任何远程分支的所有过时的本地远程跟踪分支:

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

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

    "git fetch" learned --all and --multipleoptions, to run fetch from
    many repositories, and --prune option to remove remote tracking
    branches that went stale. These make"git remote update" and"git
    remote prune" less necessary (there is no plan to remove"remote
    update" nor"remote prune", though).

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

    或者,不必通过git fetch -p删除过时的本地远程跟踪分支,只需使用--remote-r标志手动删除分支即可避免额外的网络操作:

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

    也见

    • Git分行(1)手册页。
    • Git Fetch(1)手册页。
    • pro git§;3.5 git分支-远程分支。


    步骤为deleting的分支:

    为deleting的remote分支: P / < >

    1
    git push origin --delete <your_branch>

    为deleting的当地分支,你有三种方式: P / < >

    1
    2
    3
    4
    5
    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

    explain:好的,只是explain怎么了睾丸。 P / < >

    单纯的做git push origin --delete到删除你的remote分支的唯一的名称,给英语分支商场的结局和这将删除和推它到remote在同样的时间…… P / < >

    git branch -D,这只是简单的删除的当地分支只。……………… P / < >

    -Dstands为--delete --force将删除的分支,即使是不merged(力删除),但你可以照常使用-D,stands为--delete,把一个错误的各自的分支merge现状……………… P / < >

    我也创建的图像显示到下面的步骤: P / < >

    delete a remote and local branch in git P / < >


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

    1
    git push --delete origin serverfix

    哪个做的和

    1
    git push origin :serverfix

    但它可能更容易记住。


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

    1
    git checkout other_than_branch_to_be_deleted

    删除本地分支:

    1
    git branch -D branch_to_be_deleted

    删除远程分支:

    1
    git push origin --delete branch_to_be_deleted

    提示:删除分支时使用

    1
    git branch -d <branchname> # deletes local branch

    1
    git push origin :<branchname> # deletes remote branch

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

    为了解决这个问题,您的团队成员可以使用

    1
    git remote prune <repository>

    这通常是git remote prune origin


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


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

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

    1
    git branch -d example

    (此处example为分公司名称)

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

    1
    git push origin :example


    另一种方法是:

    1
    git push --prune origin

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

    1
    git push --mirror

    将有效地使远程存储库看起来像存储库的本地副本(本地头、远程设备和标记在远程设备上镜像)。


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

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

    然后你可以打电话:

    1
    git-shoot branchname


    自2013年1月以来,Github在"分支"页面的每个分支旁边都包含一个elete Branch按钮。

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


    如果您想用一个命令来完成这两个步骤,您可以通过将以下内容添加到您的~/.gitconfig中来为其创建一个别名:

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

    或者,您可以使用命令行将其添加到全局配置中。

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

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


    本地删除:

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

    1
    git branch -d <branch_name>

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

    1
    git branch -D <branch_name>

    远程删除:

    有两种选择:

    1
    2
    3
    git push origin :branchname  

    git push origin --delete branchname

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


    本地和远程删除分支

    • 主分行结帐-git checkout master

    • 删除远程分支-git push origin --delete

    • 删除你当地的分支机构-git branch --delete


    您也可以使用git remote prune origin来完成此操作。

    1
    2
    3
    4
    $ git remote prune origin
    Pruning origin
    URL: [email protected]/yourrepo.git
     * [pruned] origin/some-branchs

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


    除了其他答案,我还经常使用git_远程_分支工具。这是一个额外的安装,但它为您提供了一种与远程分支交互的便捷方式。在这种情况下,删除:

    1
    grb delete branch

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


    一个liner命令删除本地和远程:

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

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

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


    删除分支

    Let's assume our work on branch"contact-form" is done and we've already integrated it into"master". Since we don't need it anymore, we can delete it (locally):

    1
    $ git branch -d contact-form

    删除远程分支:

    1
    git push origin --delete contact-form


    删除远程分支

    git push origin :

    删除本地分支

    git branch -D

    删除本地分支步骤:

  • 签出到另一个分支
  • 删除本地分支

  • 简单地说:

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


    现在您可以使用Github桌面应用程序来完成它。

    启动应用程序后

  • 单击包含分支的项目
  • 切换到要删除switching branch的分支
  • 从"Branch"菜单中,选择"Unpublish…",将分支从GitHub服务器中删除。unpublish branch
  • 从"branch"(分支)菜单中,选择"delete"(删除)branch_name"…",将分支从本地计算机(即当前正在使用的计算机)delete local branch中删除。

  • 1
    git push origin --delete <branch Name>

    比…更容易记住

    1
    git push origin :branchName

    要删除locally(正常的), P / < >

    1
    git branch -d my_branch

    如果你的公司是在rebasing /合并和进步,这是不做的properly意味着,你会得到一个错误的Rebase/Merge in progress如此在这情况下,你不在能到删除你的分支。 P / < >

    所以要么你需要不能解决rebasing /合并另有你可以做力通过删除不使用的, P / < >

    1
    git branch -d my_branch

    要删除在remote: P / < >

    1
    git push --delete origin my_branch

    能做同样的使用, P / < >

    1
    git push origin :my_branch   # easy to remember both will do the same.

    graphical representation, P / < >

    enter image description here P / < >


    如果您有一个与远程分支同名的标记,则此操作将不起作用:

    1
    2
    3
    $ 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 '[email protected]:SomeName/some-repo.git'

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

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

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

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


    我厌倦了谷歌搜索这个答案,所以我采取了类似的方法。克里茨克雷格早些时候发表的答案。

    将以下内容添加到我的bash配置文件中:

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

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

    1
    gitdelete my-branch-name

    …然后从origin和本地删除my-branch-name


    许多其他答案将导致错误/警告。这种方法相对来说比较简单,但是如果没有完全合并到some_other_branch中,您可能仍然需要git branch -D branch_to_delete

    1
    2
    3
    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将运行以下命令以查看最新的远程分支

    1
    2
    3
    git fetch
    git remote prune origin
    git branch -r

    执行前

    1
    git branch --delete <branch>

    确保首先通过执行以下操作确定远程分支的确切名称:

    1
    git ls-remote

    这将告诉您要为值准确输入什么。(branch区分大小写!)


    1
    2
    git push origin :bugfix  # Deletes remote branch
    git branch -d bugfix     # Must delete local branch manually

    如果确定要删除,请运行

    1
    git branch -D bugfix

    现在要清除已删除的远程分支,请运行

    1
    git remote prune origin

    把所有其他答案混为一谈。需要Ruby 1.9.3+,仅在OS X上测试。

    调用这个文件git-remove,使其可执行,并将其放到您的路径中。然后,例如,使用git remove temp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/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"
    Continuing."
          `git branch -D #{branch_name}`
          `git branch -D -r origin/#{branch_name}`
          `git push origin --delete #{branch_name}`
        else
          puts"
    Quitting."
        end
    end


    我的别名添加到我的.gitconfig以下文件。这allows我删除branches与或没有specifying分支的名字。分支的名字defaulted 当前分支如果没有argument也在时代不同了。 P / < >

    1
    2
    3
    4
    5
    6
    [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"


    删除远程分支的命令行的另一个选项是github分支页面。

    例如,请参见:https://github.com/angular/angular.js/branches

    在Github存储库的Code->Branches页中找到。

    我自己通常更喜欢命令行,但是这个Github页面向您展示了更多关于分支的信息,比如最近更新的日期和用户,以及前后提交的数量。它在处理大量分支时很有用。


    我也有类似的问题,这似乎是可行的:这将删除本地分支。git branch -d the_local_branch

    这将删除远程分支git push origin :the_remote_branch

    来源:Makandra卡


    有一个很好的答案,但是,如果您有大量的分支,那么在本地和远程逐个删除它们,这将是一项非常繁琐的任务。您可以使用此脚本自动执行此任务。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    branch_not_delete=("master""develop""our-branch-1""our-branch-2")


    for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do

        # delete prefix remotes/origin/ from branch name
        branch_name="$(awk '{gsub("remotes/origin/","");print}' <<< $branch)"

        if ! [[" ${branch_not_delete[*]}" == *" $branch_name"* ]]; then
            # delete branch remotly and locally
            git push origin :$branch_name
        fi
    done
    • 列出不想删除的分支
    • 迭代远程分支,如果它们不在我们的"保留列表"中,我们就删除了它们。

    来源:一次删除Git分支


    你可以用gitbash execute *以下: P / < >

    1
    git branch --delete <branch>

    从github桌面应用程序,当你有分支检查出来,你可以删除的当地分支的分支通过菜单条: P / < >

    enter image description here P / < >

    如果你是没有用的github桌面和应用程序,使用的是这里像视觉工作室为你的本地源控制,所有你需要做的是在一对夫妇的快速的步骤: P / < >

  • 看看其他的分支比一个你希望删除。
  • 右点击你希望删除的分支。
  • 选择"删除选项从上下文菜单。
  • 然后,我在给你logged github在线帐户,让repository和点击的所有branches标签。从那里,只是点击小图标上的垃圾可以顺利的名称为"brach你希望删除。 P / < >

    enter image description here P / < >

    保持在所有的分支-如果不是很published,没有需要去删除它从你的在线repository。 P / < >


    我convenient雅的以下功能在我的.bash _别名文件: P / < >

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    git-delete-branch()
    {
        if [[ -n $1 ]]; then
            git checkout master > /dev/null;
            branch_name="$1";
            echo"Deleting local $branch_name branch...";
            git branch -D"$branch_name";
            echo"Deleting remote $branch_name branch...";
            git push origin --delete"$branch_name";
            git remote prune origin;
            echo"Your current branches are:";
            git branch -a;
        else
            echo"Usage: git-delete-branch <branch_name>";
        fi
    }

    根据latest文件使用的终端,我们可以删除以下的方式。 P / < >

    删除在当地的: P / < >

    1
    git branch -D usermanagement

    删除在remote位置: P / < >

    1
    git push --delete origin usermanagement

    Its very simple

    要删除remote分支 P / < >

    1
    git push -d origin <branch-name>

    或 P / < >

    1
    git push origin :<branch-name>

    删除到当地的分支 P / < >

    1
    git branch -D <branch-name>


    我用在我的bash的以下设置: P / < >

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

    然后你可以打电话: P / < >

    1
    git-shoot branchname