删除远程分支的尝试失败 :

$ 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.

我如何正确删除本地和远程的远程/原产/bugfix分支?


当前回答

很简单: 只要运行以下命令 :

要删除本地和远程的 Git 分支, 请使用此命令先删除本地分支 :

git branch -d example

(此处为分支名称 。)

在此之后, 使用此命令删除远程分支 :

git push origin :example

其他回答

简短的答案

如果您想要对以下命令进行更详细的解释,请在下一节中看到长的答案。

正在删除远程分支

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 remote-tracking branches
git fetch <remote> -p      # Shorter

长的答案是:要删除三个不同的分支!

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

本地分支 X. 远程来源分支 X. 本地远程跟踪分支/X 跟踪远程分支 X.

最初使用的海报是:

git branch -rd origin/bugfix

只删除了他的本地远程跟踪分支来源/ bugfix, 而不是源代码上的实际远程分支错误。

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

git push origin --delete bugfix

补充详情

以下各节介绍在删除远程和远程跟踪分支时需要考虑的其他细节。

推动删除远程分支还删除远程跟踪分支

请注意,使用 git 推键从命令行删除远程分支 X 将会删除本地远程跟踪分支源/ X, 所以没有必要用 git 抓取 -- prune 或 git 抓取 - p 来微调过时的远程跟踪分支。 但是, 如果您还是这么做的话, 它不会有什么影响 。

您可以通过运行以下操作来验证远程跟踪分支源/ 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 (如上) , 那么您的本地仓库将仍然包含( 现在已经过时的) 远程跟踪分支源/ X 。 如果您直接通过 GitHub 的网络界面删除远程分支, 这可能发生 。

清除这些过时的远程跟踪分支(自 Git 1.6.6 版本以来)的典型方法就是简单地用 -- purune 或更短的 p 运行 Git 获取。 请注意, 这对于在远程不再存在的任何远程分支, 都会移除所有过期的本地远程跟踪分支 :

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

1.6.6号释放说明(强调地雷)的相关引文如下:

“ 提供获取” 所学的 -- 全部和 -- 多个选项, 运行从许多仓库获取, 以及 -- prune 选项, 移除过期的远程跟踪分支。 这些选项使得“ 提供远程更新” 和“ 提供远程纯度” 变得不那么必要( 虽然没有计划删除“ 远程更新” 或“ 远程更新 ” ) 。

取代对过时的远程跟踪分支自动修剪的替代品

或者,与其通过 Git 抓取 -p 来修补过时的本地远程跟踪分支,不如通过手动删除带有 -- remotes 或 - r 旗的分支,避免进行额外的网络操作:

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

另见

git-branch(1) 手册页. git-fetch(1) 手册页,Pro Git §3.5 Git 支部-远程支部。

本地删除 :

要删除本地分支,请使用:

git branch -d <branch_name>

强行删除分支,使用 -D 而不是 -d 。

git branch -D <branch_name>

远程删除 :

有两个选项:

git push origin :branchname

git push origin --delete branchname

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

现在您可以使用 GitHub 桌面应用程序了 。

启动申请程序后

点击含有分支切换到分支的工程, 您想要从“ 布朗奇” 菜单中删除分支, 选择“ 取消... ” , 将分支从 GitHub 服务器中删除。 从“ 布朗奇” 菜单中选择, 选择“ 删除“ 布尔奇_ name ” , 将分支从您的本地机器中删除( 您正在操作的机器 AKA ) 。

简单说一句:

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

最灵活的方式是使用自定义的 Git 命令。 例如, 在您的 $PATH 中以 Git- rmbranch 命名的某个地方创建以下 Python 脚本, 并使其可以执行 :

#!/usr/bin/env python3

import argparse
import subprocess
import sys

def rmbranch(branch_name, remote, force):
    try:
        print(subprocess.run(['git', 'branch', '-D' if force else '-d', branch_name],
                             capture_output=True, check=True, encoding='utf-8').stdout, end='')
    except subprocess.CalledProcessError as exc:
        print(exc.stderr.replace(f'git branch -D {branch_name}', f'git rmbranch -f {branch_name}'), end='')
        return exc.returncode

    return subprocess.run(['git', 'push', remote, '--delete', branch_name]).returncode    

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Delete a Git branch locally and remotely.')
    parser.add_argument('-r', '--remote', default='origin', help="The remote name (defaults to 'origin')")
    parser.add_argument('-f', '--force', action='store_true', help='Force deletion of not fully merged branches')
    parser.add_argument('branch_name', help='The branch name')
    args = parser.parse_args()

    sys.exit(rmbranch(args.branch_name, args.remote, args.force))

Git Rmbranch -h 将展示您使用信息 :

usage: git-rmbranch [-h] [-r REMOTE] [-f] branch_name

Delete a Git branch locally and remotely.

positional arguments:
  branch_name           The branch name

optional arguments:
  -h, --help            show this help message and exit
  -r REMOTE, --remote REMOTE
                        The remote name (defaults to 'origin')
  -f, --force           Force deletion of not fully merged branches

请注意, git 推进源 - delete <branch_ name > 也会删除本地远程跟踪分支( 默认情况下为源/ < branch_ name > ) , 因此不需要关注 。

P. S. 您可以在此找到这个 Git 命令的最新版本, 欢迎提出意见和建议 。