it-swarm.cn

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

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

尝试删除远程分支失败:

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

15136
Matthew Rankin

执行摘要

$ git Push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>

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

删除本地分支

要删除local branch,请使用以下某个选项:

$ 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 ,你可以删除一个远程branch

$ 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日]

来自 Pro Git的第3章_ Scott Chacon:

删除远程分支

假设您已经完成了远程分支 - 比如说,您和您的协作者已经完成了一项功能并将其合并到您的远程主分支(或您的稳定代码行所在的任何分支)。您可以使用相当钝的语法git Push [remotename] :[branch]删除远程分支。如果要从服务器中删除服务器修复分支,请运行以下命令:

$ git Push Origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

繁荣。您的服务器上没有更多分支。您可能想要了解此页面,因为您需要该命令,并且您可能会忘记语法。记住这个命令的一种方法是回忆一下我们之前讨论过的git Push [remotename] [localbranch]:[remotebranch]语法。如果你放弃了[localbranch]部分,那么你基本上就是说:“不要在我这边做任何事情,让它成为[remotebranch]。”

我发布了git Push Origin :bugfix,它工作得很漂亮。 Scott Chacon是对的 - 我会想要 狗耳朵 那个页面(或者通过在Stack Overflow上回答这个问题来实际上是狗耳朵)。

然后你应该在其他机器上执行它

git fetch --all --Prune

传播变化。

18919
Matthew Rankin

Matthew的答案很适合删除remote branches,我也很欣赏这些解释,但是要简单区分这两个命令:

要从您的机器中删除本地分支

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

3016
Eric Brotto

简短的答案

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

删除远程分支:

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. 远程Origin分支X
  3. 跟踪远程分支X的本地远程跟踪分支Origin/X

Visualization of 3 branches

使用的原始海报

git branch -rd Origin/bugfix

只删除了他的 本地远程跟踪分支Origin/bugfix,而不是bugfix上的实际远程分支Origin

Diagram 2

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

git Push Origin --delete bugfix

Diagram 3

额外细节

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

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

请注意,使用git Push从命令行删除远程分支X也将删除本地远程跟踪分支Origin/X,因此没有必要使用git fetch --Prunegit 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

修剪过时的本地远程跟踪分支Origin/X.

如果你没有从命令行删除你的远程分支X如上所述),那么你的本地仓库仍将包含(一个现已过时的)远程跟踪分支Origin/X。例如,如果您通过GitHub的Web界面直接删除了远程分支,就会发生这种情况。

删除这些过时的远程跟踪分支(从Git版本1.6.6开始)的典型方法是使用git fetch或更短的--Prune运行-p请注意,这将删除远程不再存在的任何远程分支的所有过时的本地远程跟踪分支

git fetch Origin --Prune
git fetch Origin -p # Shorter

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

学习“git fetch”--all--multipleoptions,从许多存储库运行fetch,以及 --Prune选项删除过时的远程跟踪分支。 这些使得“git remote update”和“git remote Prune”更少必要的(没有计划删除“远程更新”或“远程修剪”,但)。

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

或者,不要通过git fetch -p,_修剪过时的本地远程跟踪分支(您可以通过使用--remote-r标志手动删除分支来避免进行额外的网络操作

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

也可以看看

1743
user456814

删除分支的步骤:

删除 远程分支:

git Push Origin --delete <your_branch> 

要删除 local 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 Push Origin --delete添加到 仅删除您的远程分支 ,在末尾添加分支的名称,这将删除并同时将其推送到远程...

另外,git branch -D,它只删除本地分支 _只有_ !...

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

我还创建了下面的图像来显示步骤:

delete a remote and local branch in git

1234
Alireza

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

git Push --delete Origin serverfix

这与做同样的事情

git Push Origin :serverfix

但它可能更容易记住。

746
pagetribe

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

git checkout other_than_branch_to_be_deleted

删除本地分支:

git branch -D branch_to_be_deleted

删除远程分支:

git Push Origin --delete branch_to_be_deleted
357
Praveen Hiremath

提示:使用时删除分支

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

352
pfrenssen
git branch -D <name-of-branch>
git branch -D -r Origin/<name-of-branch>
git Push Origin :<name-of-branch>
256
Felipe

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

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

git branch -d example

(这里example是分支名称)

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

git Push Origin :example
220
Syeful Islam

另一种方法是: -

git Push --Prune Origin

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

git Push --mirror

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

191
imanuelcostigan

我在 Bash settings中使用以下内容:

alias git-shoot="git Push Origin --delete"

然后你可以打电话:

git-shoot branchname
160
crizCraig

自2013年1月起,GitHub包含了一个 Delete branch “分支”页面中每个分支旁边的按钮。

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

128
Nacho Coloma

如果要使用单个命令完成这两个步骤,可以通过将以下内容添加到~/.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'

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

119
Ryan Kohn

在本地删除:

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

git branch -d <branch_name> 

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

git branch -D <branch_name>

远程删除:

有两种选择:

git Push Origin :branchname  

git Push Origin --delete branchname 

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

118
Rahul Gupta

在本地和远程删除分支

  • 结帐到主分支 - git checkout master

  • 删除远程分支 - git Push Origin --delete <branch-name>

  • 删除本地分支 - git branch --delete <branch-name>

111
mfathy00

您也可以使用git remote Prune Origin执行此操作

$ git remote Prune Origin
Pruning Origin
URL: [email protected]/yourrepo.git
 * [pruned] Origin/some-branchs

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

106
nickleefly

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

grb delete branch

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

102
u2622

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

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"
92
Vinnie James

删除分支

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

$ git branch -d contact-form

并删除远程分支:

git Push Origin --delete contact-form
90
Ulysses Alves

删除远程分支

git Push Origin :<branchname>

删除本地分支

git branch -D <branchname>

删除本地分支步骤:

  1. 结账到另一个分行
  2. 删除本地分支
86
jayxhj

简单地说:

git branch -d <branch-name>
git Push Origin :<branch-name>
85
piyushmandovra

现在你可以使用 GitHub Desktop app来完成它。

启动应用程序后

  1. 单击包含分支的项目
  2. 切换到要删除的分支 switching branch
  3. 从“分支”菜单中,选择“取消发布...”,以从GitHub服务器中删除分支。 unpublish branch
  4. 从“分支”菜单中选择“删除” branch_name “...”,将分支从本地计算机(也就是您当前正在处理的计算机)上删除 delete local branch
79
Eric
git Push Origin --delete <branch Name>

更容易记住

git Push Origin :branchName
78
Smila

要在本地删除 - (正常),

git branch -d my_branch

如果您的分支在重新定位/合并进度并且未正确完成意味着,您将收到错误Rebase/Merge in progress,因此在这种情况下,您将无法删除您的分支。

所以要么你需要解决变基/合并,否则你可以通过使用强制删除,

git branch -D my_branch

要在远程中删除:

git Push --delete Origin my_branch

可以使用相同的,

git Push Origin :my_branch   # easy to remember both will do the same.

图形表示, /

enter image description here

73
Silent Spectator

如果你有一个与遥控器上的分支同名的标签,这将不起作用:

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

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

git Push Origin :refs/heads/branch-or-tag-name

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

git Push Origin :refs/tags/branch-or-tag-name
64
Amiramix

许多其他答案都会导致错误/警告。这种方法相对简单,但如果它没有完全合并到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
50
Brandon Cook

我厌倦了谷歌搜索这个答案,所以我采取了类似的方法 crizCraig发布的答案 更早。

在我的Bash配置文件中添加了以下内容:

function gitdelete(){
    git Push Origin --delete $1
    git branch -D $1
}

然后每次我完成一个分支(例如合并到master)我在终端中运行以下命令:

gitdelete my-branch-name

...然后从Origin和本地删除my-branch-name

49
arthurakay

在执行之前

git branch --delete <branch>

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

git ls-remote

这将告诉您输入<branch>值的确切内容。 (branch区分大小写!)

45
joey
git Push Origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

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

git branch -D bugfix

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

git remote Prune Origin
44
Vivek

所有其他答案的混搭。需要Ruby 1.9.3+,在OS X上测试 only

调用此文件git-remove,使其可执行,并将其放在您的路径中。然后使用例如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
43
Dan Rosenstark

我将以下别名添加到我的.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"
39
Jared Knipp

用于删除远程分支的命令行的备选选项是 GitHub分支页面

例如: https://github.com/angular/angular.js/branches

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

我一般更喜欢命令行,但是这个 GitHub页面显示了更多的信息 关于分支,例如 最后更新日期和用户 ,和 前后提交的数量 。处理大量分支时很有用。

31
Bradley Flood

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

这将删除远程分支git Push Origin :the_remote_branch

来源:Makandra Cards

30
Srijan Karki

有很好的答案,但是,如果你有大量的分支机构,在本地和远程一个接一个地删除它们将是一项单调乏味的任务。您可以使用此脚本自动执行此任务。

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-branches-at-once

28
levi

使用 GitBash 您可以执行以下操作:

git branch --delete <branch>

OR

从GitHub桌面应用程序,当您签出分支时,您可以通过Branch菜单条删除 Local branch:

enter image description here

如果您 不是 使用GitHub桌面应用程序,并且使用IDE就像Visual Studio一样用于本地源代码控制,您只需要几个快速步骤:

  1. 查看您要删除的分支以外的分支。
  2. 右键单击要删除的分支。
  3. 从上下文菜单中选择 删除 选项。

然后,在线登录您的GitHub帐户后,转到存储库并单击所有分支tab。从那里,只需点击您要删除的brach名称右侧的小垃圾桶图标。

enter image description here

*请记住 - 如果分支未发布,则无需尝试从在线存储库中删除它。

23
Uchiha Itachi

我在.bash_aliases文件中创建了以下方便的函数:

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
}
19
Vagelis Prokopiou

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

在本地删除:

git branch -D usermanagement

在远程位置删除:

git Push --delete Origin usermanagement
19
KARTHIKEYAN.A

它非常简单

删除远程分支

git Push -d Origin <branch-name>

OR

git Push Origin :<branch-name>

删除本地分支

git branch -D <branch-name>
15
Vivek Maru