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

git version-control git-branch git-push git-remote HinanaiTokiko | 2020-02-02 19:35:06


我想删除本地和远程分支。
删除远程分支的尝试失败
$ 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.

要成功删除本地和远程分支,我应该做些什么?


本站提供【Linux疑难问题解决】50元起 ,【爬虫开发】200元起。欢迎咨询QQ:376667689 点击这里给我发消息



30 回答


20898


执行摘要
$ git push -d  
$ git branch -d

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

在这种情况下,您必须使用类似的命令。
$ git push -d 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  --delete 

删除远程分支,这可能比添加到Git v1.5.0“中的
$ git push  :

删除远程分支或标记更容易记住。”
从Git v2.8.0开始,您还可以使用
git push
-d
选项作为别名
--delete

因此,您安装的Git版本将决定您是否需要使用更简单或更难的语法。
删除远程分支(2010年1月5日的原始答案)Scott Chacon在Pro Git的第3章中写道:
删除远程分支(Deleting Remote Branch)
假设您已经完成了远程分支(比方说,您和您的协作者完成了一个特性,并将其合并到远程的主分支(或稳定代码行所在的任何分支)中。您可以使用相当生硬的语法删除远程分支。如果要从服务器中删除服务器修复分支,请运行以下命令:
$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
- [deleted] serverfix

Boom。服务器上不再有分支。您可能想监听这个页面,因为您需要那个命令,而且可能会忘记语法。记住这个命令的一种方法是调用我们前面讨论过的
git push [remotename] [localbranch]:[remotebranch]
语法。如果你把
[localbranch]
部分去掉,那么你基本上是在说,“不要站在我这边,让它成为
[remotebranch]

我发布了
git push origin: bugfix
,它工作得很好。Scott Chacon是对的,我想监听那个页面(或者通过在堆栈溢出时回答这个问题,实际上是监听那个页面)。
然后您应该在其他机器上执行这个操作来传播更改。
# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

2020-02-02 19:35:18
东风谷の回忆

3259


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

2020-02-02 19:35:18
orz之主

1912


简短的回答
如果您想更详细地解释以下命令,然后在下一节中查看长答案。
删除远程分支:
git push origin --delete   # Git version 1.7.0 or newer
git push origin -d # Shorter version (Git 1.7.0 or newer)
git push origin : # Git versions older than 1.7.0

删除本地分支:
git branch --delete 
git branch -d # Shorter version
git branch -D # Force delete un-merged branches

删除本地远程跟踪分支:
git branch --delete --remotes /
git branch -dr / # Shorter
git fetch --prune # Delete multiple obsolete tracking branches
git fetch -p # Shorter

长答案:有3个不同的分支要删除!
在处理本地和远程删除分支时,请记住,涉及到3个不同的分支:
本地分支
X

远程分支
X

本地远程跟踪分支
origin/X
跟踪远程分支
X


原始海报使用
git branch -rd origin/bugfix

删除本地远程跟踪分支
origin/bugfix
,而不是实际的远程分支
bugfix
on
origin

删除实际的远程分支,您需要
git push origin --delete bugfix

其他详细信息
以下部分描述删除远程和远程跟踪分支时要考虑的其他详细信息。
按删除远程分支也会删除远程跟踪分支
请注意,从命令中删除远程分支
X
使用
git push
的行还将删除本地远程跟踪分支
origin/X
,因此不必使用
git fetch --prune
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

如果您没有从命令行(如上所述),则本地repo仍将包含(现已过时的)远程跟踪分支
origin/X
。例如,如果直接通过GitHub的web界面删除远程分支,则会发生这种情况。
删除这些过时的远程跟踪分支的典型方法(因为Git版本1.6.6)是使用
git fetch
--prune
或更短的
-p
运行。请注意,在远程上不再存在的任何远程分支都会删除所有过时的本地远程跟踪分支:
[代码] > /PRE> > BR>这是从1.66发布注释(强调雷)的相关引用:
“Git FETCH”“学习< PRE> >代码> [代码> < /Prime>和代码> [ 26 ] < /PRE>选项,从
运行取回许多存储库,以及删除过时的远程跟踪分支的选项。这使得“git remote update”和“git
remote prune”变得不那么必要(尽管没有删除“remote
update”和“remote prune”的计划)。
除了上述针对过时的远程跟踪分支的自动修剪之外,还有一种选择,而不是通过
git fetch -p
修剪过时的本地远程跟踪分支,您可以通过手动删除带有
--remote
-r
标志的分支来避免进行额外的网络操作:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

另请参见
git分支(1)手册页。
git获取(1)手册页。
Pro git§3.5 git分支-远程分支。

2020-02-02 19:35:18
Dalka

1488


删除分支的步骤:
删除远程分支的步骤:
git push origin --delete  

删除本地分支的方法有三种:
1: git branch -D  
2: git branch --delete --force //same as -D
3: git branch --delete //error on unmerge

解释:好的,解释一下这里发生了什么!
只需执行
git push origin --delete
即可仅删除您的远程分支,在末尾添加分支的名称,这将同时删除并将其推送到远程…
此外,
git branch -D
,仅删除本地分支!…
-D
表示即使分支未合并也将删除该分支的
--delete --force
(强制删除),但也可以使用
-d
表示
--delete
分别抛出分支合并状态的错误…
我还创建下面的图像以显示步骤:

2020-02-02 19:35:18
雷死人了

788


您还可以使用以下命令删除远程分支
git push --delete origin serverfix

,它与
git push origin :serverfix

执行相同的操作,但可能更容易记住。

2020-02-02 19:35:18
瘋騷灬

368


提示:使用
git branch -d  # deletes local branch


git push origin : # deletes remote branch

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

操作时,删除的分支仍然可见。若要解决此问题,您的团队成员可以使用
git remote prune 

删除已删除的分支,这通常是
git remote prune origin

2020-02-02 19:35:18
吐槽山萌萌子

361


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

删除本地分支:
git branch -D branch_to_be_deleted

删除远程分支:
git push origin --delete branch_to_be_deleted

2020-02-02 19:35:18
你们都是大纱布

261


git branch -D 
git branch -D -r origin/
git push origin :

2020-02-02 19:35:18
NEST

224


这很简单:只需运行以下命令:
要在本地和远程删除Git分支,请首先使用命令删除本地分支:
git branch -d example

(这里
example
是分支名称)
然后使用命令删除远程分支:
git push origin :example

2020-02-02 19:35:18
lichee

196


另一种方法是:-BR> < PRE> >代码>(0) < /PRE> > BR>警告:这将删除所有不存在于本地的远程分支。或者更全面地说,
git push --mirror

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

2020-02-02 19:35:18
123456789

165


我在Bash设置中使用以下设置:
alias git-shoot="git push origin --delete"

然后您可以调用:
git-shoot branchname

2020-02-02 19:35:18
奈何戈

131


本地删除:
若要删除本地分支,可以使用:
git branch -d  

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

git branch -D 

远程删除:
有两个选项:
git push origin :branchname  
git push origin --delete branchname

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

2020-02-02 19:35:18
水原ありさ

129


自2013年1月起,GitHub在“分支”页面的每个分支旁边都包含了一个“删除分支”按钮。
相关博客文章:创建和删除分支

2020-02-02 19:35:18
代号H

124


如果您想用一个命令完成这两个步骤,您可以将下面的内容添加到您的
~/.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)。

2020-02-02 19:35:18
尛嘴亂親

115


在本地和远程删除分支
签出到主分支-
git checkout master

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

删除本地分支-
git branch --delete 

2020-02-02 19:35:18
右代宫明日梦

112


您还可以使用
git remote prune origin

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

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

2020-02-02 19:35:18
左手的小喵

106


除了其他答案,我还经常使用git_remote_分支工具。这是一个额外的安装,但它可以让您方便地与远程分支进行交互。在这种情况下,要删除:
grb delete branch

我发现我也经常使用
publish
track
命令

2020-02-02 19:35:18
窓辺ななみ

96


一行命令同时删除本地和远程:
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"

2020-02-02 19:35:18
若鱼

93


删除分支
假设我们对分支“contact form”的工作已经完成,并且已经将其集成到“master”中。因为我们不再需要它,我们可以删除它(本地):
$ git branch -d contact-form

和删除远程分支:
git push origin --delete contact-form

2020-02-02 19:35:18
yus

87


从这个远程分支
git push origin :
git branch -D 

签出到另一个分支

2020-02-02 19:35:18
路过

86


简单地说:
git branch -d 
git push origin :

2020-02-02 19:35:18
黑色光芒

82


git push origin --delete 


git push origin :branchName
更容易记住

2020-02-02 19:35:18
苏柒

80


现在,您可以使用GitHub桌面应用程序完成此操作。
启动应用程序后,单击包含分支的项目
切换到要从“分支”菜单中删除的分支,选择“取消发布…”,将分支从GitHub服务器中删除。
从“Branch”(分支)菜单中,选择“Delete”Branch_name“…”,将分支从本地计算机(也称为您当前正在处理的计算机)中删除

2020-02-02 19:35:18
八云蓝

74


若要在本地删除(正常),
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.

图形表示,

2020-02-02 19:35:18
ayuayuyu

68


如果您的标记与远程上的分支同名,则此操作将不起作用:
$ 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

2020-02-02 19:35:18
萝莉

53


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

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

2020-02-02 19:35:18
mioy

50


我厌倦了在谷歌上搜索这个答案,所以我对crizCraig之前发布的答案采取了类似的方法。
在我的Bash配置文件中添加了以下内容:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}

然后每次我处理完分支(合并到
master
,例如)我在终端中运行以下命令:
gitdelete my-branch-name

…然后从
origin
中删除
my-branch-name

2020-02-02 19:35:18
茅盾

47


在执行
git branch --delete 

之前,请确保首先通过执行来确定远程branch的确切名称:
git ls-remote

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

2020-02-02 19:35:18
双叶呆

46


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

如果您确定要删除它,请运行
git branch -D bugfix

立即清除已删除的远程分支运行
git remote prune origin

2020-02-02 19:35:18

43


所有其他答案的混合。需要
Ruby 1.9.3+
,仅在OS X上测试。
调用此文件
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

2020-02-02 19:35:18
ling



Copyright © 2019-2020 zimt8.com
备案号:湘ICP备19012068号