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

$ 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 push -d <remote_name> <branchname>
git branch -d <branchname>

注:在大多数情况下,<remote_name>将是来源。

删除本地分处

删除本地分支时使用下列分支之一:

git branch -d <branch_name>
git branch -D <branch_name>

-d 选项是 --delete的别名,它只删除已经完全合并到上游分支的分支。 -D选项是 -- delete-force的别名,它删除分支“不管其合并状态如何”。 [资料来源: man git-branch] As of Git v2.3, git 分支 -d (删除) 学会尊重 -f (力量) 旗帜。如果试图删除当前选中的分支, 你会收到错误 。

删除远程分支

至 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 推动作为 -- delette 的别名。 因此, 您安装的 Git 版本将决定您是否需要使用更简单或更难的语法 。

删除远程处[原件:2010年1月5日的答复]

Scott Chacon在《Pro Git》第三章中写道:

删除远程分支 假设您已经用远程分支完成 — — 比如, 您和您的合作者已经完成了一个功能, 并已将其合并到您的远程主要分支( 或您稳定的代码行所在的分支 ) 。 您可以使用非常隐蔽的 usyntatget git 推 [ remotename] 来删除远程分支 : [branch] 。 如果您想要从服务器中删除服务器上的服务器链接分支, 您将运行以下操作 :

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

boom 。 服务器上不再有树枝。 您可能想要在这个页面上下手, 因为您需要这个命令, 您可能会忘记语法 。 记住这个命令的一个方法就是回顾我们稍早一些时段的语法。 如果您离开[ 本地支 部分, 那么您基本上会说 : “ 不要在我身边做任何事情,让它成为[远程支 。 ”

斯科特·查孔说得没错,我想在Stack Overflow上回答这个话题(或几乎是狗耳朵 ) 。

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

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

以传播变化。


您也可以使用以下内容删除远程分支

git push --delete origin serverfix

git push origin :serverfix

但它可能更容易记住。


除了其他答案之外, 我经常使用 git_ remote_ branch 工具。 这是一个额外的安装, 但是它能方便地与远程分支进行互动。 在这种情况下, 请删除 :

grb delete branch

我发现我还经常使用 出版和跟踪命令。


Matthew的回答对移除远程树枝很有帮助, 我也欣赏这一解释,

要从您的机器中删除本地分支 : git 分支 - d { local_ branch} (使用 - D 代替强制删除分支而不检查合并状态); 从服务器中删除远程分支 : git 推源 - d {remote_ branch} 。

参考: Git: 删除分支( 本地或远程) 。


提示:当您使用删除分支时

git branch -d <branchname> # Deletes local branch

git push origin :<branchname> # Deletes remote branch

仅删除引用 。 即使该分支实际上被远程删除, 但它的引用仍然存在于您的团队成员所在的本地存储库中 。 这意味着对于其他团队成员来说, 被删除的分支在做 Git 分支 - a 时仍然可见 。

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

git remote prune <repository>

这是典型的 Git 远程纯素来源 。


另一种办法是:

git push --prune origin

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

git push --mirror

将有效地使远程存储库看起来像本地版本的存储库(本地负责人、远程和标签在远程镜像) 。


如果您想要用一个命令来完成这两个步骤, 您可以在 ~ /. gitconfig 中添加下面的替代名称 :

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

或者,您可以从命令行使用

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

注:如果使用 -d(小写d),该分支只有在合并时才被删除。要强制删除,您需要使用 -D(大写D)。


您也可以使用 Git 远程光素来源来做此操作

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

它从 Git 分支 - r 列表中提取并删除远程跟踪分支 。


我在我的巴什设置中使用了以下内容:

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

然后您可以拨打:

git-shoot branchname

自2013年1月以来, GitHub 在您的“ Branches” 页中, 在每个分支旁边有一个删除分支按钮 。

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


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

这是所有其他答案的拼图。 它需要 Ruby 1.9. 3 +, 并且只在 OS X 上测试 。

调用此文件 git- remove, 让它可执行, 并把它放在您的路径中。 然后使用, 例如, git 删除临时 。

#!/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 分支 - D 分支 - D 分支_ to_ deletete , 如果它没有完全合并到其它分支中, 比如 。

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

如果您删除了远程分支, 不需要远程剪切。 它只用来获取您正在跟踪的仓库中可用的最新远程 。 我观察过 Git 抓取将会添加远程, 而不是移除它们 。 下面的例子说明 Git 远程 Pinene 何时会真正做点什么 :

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

git fetch
git remote prune origin
git branch -r

简短的答案

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

正在删除远程分支

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 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 checkout other_than_branch_to_be_deleted

删除本地分支 :

git branch -D branch_to_be_deleted

删除远程分支 :

git push origin --delete branch_to_be_deleted

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

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

git branch -d example

(此处为分支名称 。)

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

git push origin :example

简单说一句:

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

git push origin --delete <branch Name>

较容易记住

git push origin :branchName

本地删除 :

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

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 分支 $ git - d 联系形式 。

要删除远程分支 :

git push origin --delete contact-form

删除远程分支

git 推推源 : <branchname>

删除本地分支

git 分支 -D <branchname>

删除本地分支步骤 :

退出退出到另一个分支删除本地分支


本地和远程删除您的分支

退出到母版分支 - git 检查退出母版母版 删除您的远程分支 - git 推进源 - delette <branch- name > 删除您的本地分支 - git 分支 - delette < branch- name >


删除远程分支的命令行的替代选项是 GitHub 分支页面。

例如,见:https://github.com/agorm/agorgon.js/branches。

在代码 - > GitHub 库的分支页面中找到 。

我一般更喜欢指挥行本身,但这个 GitHub 页面显示您对分支的更多信息,例如最新日期和用户,以及前后承诺的数量。 这对于处理大量分支很有用。


我厌倦了勾引这个答案, 所以我采取了类似的方法 来回答克里格早些时候发布的答案。

我在我的巴什档案中增加了以下内容:

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

每当我完成一个分支(例如, 合并为主人)时, 我在我的终端里运行以下功能:

gitdelete my-branch-name

...然后从源头和本地删除我的处名


使用 :

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>

确保您首先通过执行确定远程分支的确切名称 :

git ls-remote

这将指示您为 < branch> 值输入什么 。 ( branch 是区分大小写 ! )


答案是好的, 但是, 如果您有一大堆分支, 逐个删除本地和远程的分支, 将会是一个无聊的任务 。 您可以使用此脚本将这些任务自动化 。

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 分支


一班级命令,删除本地和远程两个部分:

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

或添加以下别名到 ~/. gitconfig 的 ~ /. gitconfig 。 用法: git 杀死分支名称

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

使用 Git Bash 您可以执行以下操作 :

git branch --delete <branch>

- 带

从 GitHub 桌面应用程序中, 当您检查了分支时, 您可以通过分支菜单条删除本地分支 :

如果您没有使用 GitHub 桌面应用程序, 并且正在使用像视觉工作室那样的 IDE 来控制本地源码, 您只需要采取几个快速步骤 :

检查您要删除的分支以外的分支。右键单击您想要删除的分支。从上下文菜单中选择删除选项。

然后,一旦在网上登录到您的 GitHub 账户, 转到仓库, 并单击所有分支的标签。 从那里, 单击小垃圾桶就可以在右侧您想要删除的分支的名称上图标 。

无需试图从你的网上存储库删除。


我在我的. 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"

删除本地端 - (正常)

git branch -d my_branch

如果分行处于调整/合并的进度中,且未正确完成,这意味着您将会出错, 重设/ 计量在进行中, 因此在这种情况下, 您将无法删除分行 。

所以要么你需要解决重置/合并问题。 否则,你可以通过使用, 强制删除,

git branch -D my_branch

要删除远程 :

git push --delete origin my_branch

您可以使用 :

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

图形代表:


删除分支的步骤 :

删除远程分支时:

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 推源 - 删除只删除您的远程分支, 在结尾处添加分支的名称, 这将同时删除并推到远程...

Git 分支 - D, 仅删除本地分支!

-D 代表 --delete --force,它会删除分支,即使它没有合并(force development),但您也可以使用 -d 表示 --delete,它会抛出分支合并状态的错误...

我还创造下面的图像,以显示步骤:


我在我的.bash_alians 文件中创建了以下方便功能 :

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
}

根据最新文件,使用终端,我们可以以以下方式删除。

删除本地语 :

git branch -D usermanagement

在远程位置删除 :

git push --delete origin usermanagement

很简单:

删除远程分支

git push -d origin <branch-name>

git push origin :<branch-name>

- 也可以用此语法删除标记

强制删除本地分支

git branch -D <branch-name>

注意: 在删除远程分支后, 在其它机器上进行 Git 抓取 -- all -- prune, 以删除过时的跟踪分支 。

示例示例示例示例

要删除本地分支

git branch -D my-local-branch

要删除远程分支

git push origin :my-remote-branch

随着新版本的Git, 也有可能删除分支

git push origin --delete <branch_name>

TIP: 如果您想要查看所有可用的分支, 您可以使用 git 分支 - a,

您可以使用 Git 分支 - r 查看远程分支


AcolAJ86 和 apentwarr 的回答都非常相似。 我反复地在两个小组之间走来走去,试图了解支持子模块替换的更好方法。 下面是两者的组合。

首先将 Git Bash 导航到 Git 仓库的根部, 以便分割 。 我这里的例子就是 ~/ Documents/ irstRepo( master) 。

# Move the folder at prefix to a new branch
git subtree split --prefix=SubFolderName/FolderToBeNewRepo --branch=to-be-new-repo

# Create a new repository out of the newly made branch
mkdir ~/Documents/NewRepo
pushd ~/Documents/NewRepo
git init
git pull ~/Documents/OriginalRepo to-be-new-repo

# Upload the new repository to a place that should be referenced for submodules
git remote add origin git@github.com:myUsername/newRepo.git
git push -u origin master
popd

# Replace the folder with a submodule
git rm -rf ./SubFolderName/FolderToBeNewRepo
git submodule add git@github.com:myUsername/newRepo.git SubFolderName/FolderToBeNewRepo
git branch --delete --force to-be-new-repo

下面是上面的复制件,上面有自定义的可定义名称替换和使用 HTTPS 。 根文件夹现在为 ~/ Documents/_ Shawn/ UnityProjects/ SoProject( master) 。

# Move the folder at prefix to a new branch
git subtree split --prefix=Assets/SoArchitecture --branch=so-package

# Create a new repository out of the newly made branch
mkdir ~/Documents/_Shawn/UnityProjects/SoArchitecture
pushd ~/Documents/_Shawn/UnityProjects/SoArchitecture
git init
git pull ~/Documents/_Shawn/UnityProjects/SoProject so-package

# Upload the new repository to a place that should be referenced for submodules
git remote add origin https://github.com/Feddas/SoArchitecture.git
git push -u origin master
popd

# Replace the folder with a submodule
git rm -rf ./Assets/SoArchitecture
git submodule add https://github.com/Feddas/SoArchitecture.git
git branch --delete --force so-package

最灵活的方式是使用自定义的 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 命令的最新版本, 欢迎提出意见和建议 。


最初的几种方法对我行不通。

假设你有以下分支和远程分支,

Local : Test_Branch
Remote: remotes/origin/feature/Test_FE

正确设置上方为您本地分支以跟踪您想要删除的远程分支 。

git branch --set-upstream-to=remotes/origin/feature/Test_FE Test_Branch

然后删除远程分支执行此任务

git push origin --delete Test_Branch

然后删除本地分支,按照命令执行

git branch -D Test_Branch

就是这样。


您可以在此删除与 Glob 或任何分支名称相对应的远程分支 :

git branch -r --list "origin/*" | xargs git branch -r -D