尝试删除远程分支的尝试失败
$ 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 楼
执行摘要$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>
请注意,在大多数情况下,远程名称为
origin
。在这种情况下,您必须像这样使用命令。
$ git push -d origin <branch_name>
删除本地分支
要删除本地分支,请使用以下操作之一:
$ git branch -d branch_name
$ git branch -D branch_name
注意:
-d
选项是--delete
的别名,它仅在分支已经完全合并时才删除它。在其上游分支。您还可以使用-D
,它是--delete --force
的别名,它删除分支“无论其合并状态如何”。 [来源:man git-branch
] 还请注意,如果您当前
要删除的分支,则
git branch -d branch_name
将失败。该消息以error: Cannot delete the branch 'branch_name'
开头。如果是这样,请首先将切换到其他分支,例如:
git checkout master
。删除远程分支[2017年9月8日更新]
从Git v1.7.0起,您可以删除使用
$ git push <remote_name> --delete <branch_name>
进行远程分支比
在Git v1.5.0中添加的“删除远程分支或标签。 >从Git v2.8.0开始,您还可以使用带有
git push
选项的-d
作为--delete
的别名。 />删除远程分支[2010年1月5日的原始答案] 从Scott Chacon撰写的Pro Git第3章中:
删除远程分支
假设您已经完成了远程分支-例如,您和您的协作者已经完成了一项功能,并将其合并到远程主分支(或稳定代码行所在的任何分支)中。您可以使用相当钝的语法
git push [remotename] :[branch]
删除远程分支。如果要从服务器删除服务器修补程序分支,请运行以下命令:$ git push <remote_name> :<branch_name>
繁荣。您的服务器上没有更多分支。您可能需要关注此页面,因为您将需要该命令,并且可能会忘记语法。记住此命令的一种方法是调用前面提到的
git push [remotename] [localbranch]:[remotebranch]
语法。如果您忽略了[localbranch]
部分,那么您基本上是在说:“什么也不做,让它成为[remotebranch]
。” 我发布了
git push origin: bugfix
,它工作得很漂亮。斯科特·查孔(Scott Chacon)的观点是正确的-我会想听那一页(或者通过在StackOverflow上回答这个问题来听一下)。然后您应该在其他机器上执行它
。
评论
删除服务器上的远程分支后,不要忘记在其他计算机上执行git fetch --all --prune。 |||使用git branch -d删除本地分支并使用git push origin --delete删除远程分支后,其他机器可能仍然具有“过时的跟踪分支”(要查看它们执行git branch -a)。为了摆脱这些,做git fetch --all --prune。
–特雷弗·博伊德·史密斯
15年5月27日在16:51
除了@TrevorBoydSmith的git branch -a查看所有分支外,您还可以使用git branch -r仅查看远程分支。另请参见git remote show origin-来源:gitready.com/intermediate/2009/02/13/list-remote-branches.html
–桑德拉
2015年9月9日9:53
我必须运行git branch -D Branch_Name来摆脱本地分支
–科洛布峡谷
16 Mar 10 '16 at 1:32
@KolobCanyon如果分支尚未合并到另一个分支,则仅需使用-D。
– BTRUE
16年4月5日在16:27
问题是“要在本地和在GitHub上成功删除remotes / origin / bugfix分支,我需要做些什么?”在更新后的答案中运行命令后,本地分支仍然存在。如果接受的答案是完整的答案,那就太好了。 Git很难完成简单的任务,这真是太神奇了……
– jww
16年6月7日在2:15
#2 楼
Matthew的答案对于删除远程分支非常有用,我也很欣赏其中的解释,但要在两个命令之间进行简单区分:要从计算机上删除本地分支:
git branch -d {the_local_branch}
(改为使用-D
强制删除分支而不检查合并状态)要从服务器中删除远程分支:
git push origin --delete {the_remote_branch}
参考:Git:删除分支(本地或远程)
评论
@megido好-D强制删除,-d如果尚未合并,则会向您发出警告。
–TankorSmash
2014年11月6日19:04
如果您的本地分支未与master合并,并且运行了'git branch -d your_branch,则您将出现类似错误的错误:分支'your_branch'未完全合并。如果确定要删除它,请运行'git branch -D your_branch'。
–极客
2015年10月31日12:59
我建议使用-d而不是-D,因为它更安全。如果-d由于未合并的提交而失败,那么您需要进行评估,如果可以删除,则请使用-D。
–rooby
16年2月2日,下午3:47
其他具有已删除远程分支的存储库克隆的数据库,应运行git remote prune
– code_dredd
16年4月18日在23:07
我想补充一点,-d如果未与当前HEAD合并,则会发出警告。如果需要澄清,我建议使用此命令git branch -a --merged origin / master它会列出本地和远程的所有分支。已经合并为主人。附加信息在这里
–埃里克
17年2月10日在13:10
#3 楼
简短的答案如果要对以下命令进行更详细的说明,请参阅下一节的详细答案。
删除远程分支
/>
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
。跟踪远程分支的本地远程跟踪分支
origin/X
远程分支机构X
。使用的原始海报:
git branch -rd origin/bugfix
仅哪个删除了他的本地远程跟踪分支
origin/bugfix
,而不是bugfix
上的实际远程分支origin
。要删除该实际的远程分支,您需要
git push origin --delete bugfix
其他详细信息
以下各节描述了删除远程和远程跟踪分支时要考虑的其他详细信息。 br />
按下删除远程分支也会删除远程跟踪分支
请注意,使用
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
修剪过时的本地远程跟踪分支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
和--multiple
选项,可以从许多存储库,以及
--prune
选项可删除过时的远程跟踪。这些使“ git remote update”和“ git 远程修剪”的必要性降低(尽管没有计划删除“ remote
更新”或“ remote prune”)。
上述自动修剪替代过时的远程跟踪分支机构
或者,通过
git fetch -p
修剪过时的本地远程跟踪分支机构,您可以避免通过手动进行额外的网络操作删除带有--remote
或-r
标志的分支: git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
另请参见
Pro Git§3.5 Git分支-远程分支。
评论
从您的插图中,我可以看到有本地克隆存储库和远程起源存储库。因此,至少有两个物理分支。要删除的第三个分支在哪里?第三分支只是指向本地克隆存储库中提交的指针吗?
–拥抱
16年2月18日在2:00
@huggie几乎是正确的。 Git中的分支只是附加到提交的书签。因此,在我上面的图表中,本地克隆(2个分支)中有X和origin / X书签,然后在远程(有3个分支)中有X。
–user456814
16-2-23在7:33
+1为远程跟踪分支。克隆其他人的分支时,此分支会引起问题。它会继续跟踪您的提交,并询问您是否要推送到该人的分支机构。
–Kermit_ice_tea
17年6月21日在19:48
为了将来的读者起见:@Kermit_ice_tea上面所说的是本地分支(如本答案所述),而不是远程跟踪分支。当本地分支为其配置了“上游分支”时,默认情况下它将从该远程分支拉出并推送到该远程分支。设置了“上游分支”的本地分支称为“跟踪分支”,因此由于术语相似,很容易与远程跟踪分支混淆。
–David P
3月5日,11:21
我已经读完所有答案,这肯定是到目前为止我读过的最好的答案!-(也许是本页上最好的答案,句号)。这是特别正确的,因为它是唯一表明我从未知道过的非常重要的事实的答案:“要删除3个不同的分支!”我不知道!这一切现在变得更加有意义,并且现在在这里也为所有其他答案提供了很多启示。谢谢!
–加百利·斯台普斯
4月3日20:35
#4 楼
删除分支的步骤:删除远程分支的步骤:
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 push origin --delete
即可删除您的远程分支,添加分支的名称最后,这将同时删除并将其推送到远程... git branch -D
,它仅删除本地分支!... -D
代表--delete --force
,即使未合并也将删除分支(强制删除),但您也可以使用-d
代表--delete
,这会引发分支合并状态各自的错误... I还创建下面的图像以显示步骤:
评论
git branch -a将显示本地和远程分支。
–LoranceChen
17年7月27日在3:01
请注意,如果要在要删除的分支上进行设置,则在删除本地分支之前,需要签出除要删除的分支以外的其他分支(例如master)。
–Bamer Amer
18年5月28日在8:43
当分支机构在原始位置被删除时,您的本地存储库将不会对此进行通知。您仍将拥有这些分支的本地缓存版本(这确实不错),但是git branch -a仍会将它们列为远程分支。您可以像下面这样在本地清除该信息:git remote prune origin这样做不会删除已删除分支的本地副本。通过使用git fetch --prune可以达到相同的效果
–vibs2006
19年5月8日在6:33
图像分散注意力并且非常大,没有任何答案。我希望这不会成为SO的趋势。
– jmiserez
19-09-6在10:31
#5 楼
您也可以使用以下命令删除远程分支git push --delete origin serverfix
与
git push origin :serverfix
做相同的事情>但可能更容易记住。
评论
...更安全使用:O
–cst1992
17年11月29日在7:31
您忘记了有关删除本地分支的部分,可以通过以下方式完成:git branch -d
–短跑
18-2-14在4:23
#6 楼
提示:使用 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
。评论
您应该弄清楚上面的git push操作会删除本地分支和远程分支。
– Annika Backstrom
13年5月21日在13:51
请注意,git remote prune是删除过时的远程跟踪分支的一种过时的方法,更新的方法是使用git fetch --prune或git fetch -p。
–user456814
2014年6月11日在16:30
@RRMadhav,实际上,删除后您将看不到已删除的分支,因为将为您本地删除对远程分支的引用。团队中已签出该分支的其他任何人仍将具有该引用,并且仍然会看到该引用,除非他们修剪该分支。
– pfrenssen
2014年12月5日14:27
#7 楼
如果要删除分支,请先检出要删除的分支以外的分支。git checkout other_than_branch_to_be_deleted
删除本地分支:
git branch -D branch_to_be_deleted
删除远程分支:
git push origin --delete branch_to_be_deleted
#8 楼
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
评论
注意,-D强制删除。最好使用-d,它会提醒您是否需要做一些危险的事情。
–乔纳森·莱因哈特(Jonathon Reinhart)
2015年1月10日在1:08
ahahah :)由您决定:如果想看到git crying,请使用-d;如果想哭,请使用-D。
–Felipe
15年2月13日在11:21
#9 楼
这很简单:只需运行以下命令:要在本地和远程删除Git分支,请首先使用以下命令删除本地分支:
git branch -d example
(这里
example
是分支名称。)然后,使用以下命令删除远程分支:
git push origin :example
#10 楼
非常简单:删除远程分支
git push -d origin <branch-name>
或
git push origin :<branch-name>
强制删除本地分支
git branch -D <branch-name>
评论
我需要使用--delete而不是-d来删除远程分支。
– ZakJ
17-12-10在23:22
-d选项是--delete的别名,如果--delete工作,那么-d也应该工作,如果您要删除分支,可以使用-D代替-d或--delete。
– Vivek Maru
17年12月18日在9:48
#11 楼
另一种方法是:git push --prune origin
警告:这将删除本地不存在的所有远程分支。或更全面地说,
git push --mirror
将有效地使远程存储库看起来像存储库的本地副本(本地头,远程对象和标签在远程上被镜像)。 />
评论
git push --prune origin在gitlab上对我没有任何帮助:git clone git://repo.git; git branch -d -r起源/分支git push --prune起源;收益:一切都是最新的; git fetch;带回本地删除的分支; git push --mirror;现在他们真的不见了!
–eMBee
2015年10月8日在16:46
#12 楼
我在Bash设置中使用了以下内容:alias git-shoot="git push origin --delete"
然后您可以调用:
git-shoot branchname
评论
我最终只是将别名“ shoot”添加到我的.gitconfig Shoot = push origin --delete中
–hdost
2014年12月4日18:06
如果您的原点是Atlassian Stash,并且分支设置为默认分支,则会出现错误“默认情况下,删除当前分支被拒绝...”。在删除之前,我必须更改Stash中的默认分支以指向另一个分支。
–新
2014年12月12日下午0:29
完成此操作非常简单,但是fyi git也允许您自定义命令。将git push origin --delete $ 1放在您的路径中名为git-shoot的文件中,并且git Shoot分支名称也将起作用。
– mahemoff
2015年10月14日在7:09
#13 楼
本地删除:要删除本地分支,可以使用:
git branch -d <branch_name>
要强制删除分支,请使用
-D
而不是-d
。 git branch -D <branch_name>
远程删除:
有两个选项:
git push origin :branchname
git push origin --delete branchname
我建议您使用第二种方法,因为它更直观。
#14 楼
自2013年1月起,GitHub在“分支”页面的每个分支旁边都包含一个Delete分支按钮。相关博客文章:创建和删除分支
评论
我今年才开始使用Github,所以我想知道为什么这是一个受到高度评价的问题,为什么没有最重要的答案建议从Github Web界面删除它!有趣的是,这只是最近的补充。
– Cam Jackson
2013年9月11日12:18在
我正要指出这一点。请注意,该按钮不会删除您的本地分支机构...有关此操作的信息,请参见以下答案:stackoverflow.com/a/10999165/901641
–ArtOfWarfare
13-10-29在14:02
#15 楼
如果要用一个命令完成这两个步骤,则可以通过将以下内容添加到您的~/.gitconfig
中来为其创建别名: [alias]
rmbranch = "!f(){ git branch -d && git push origin --delete ; };f"
或者,您可以使用
git config --global alias.rmbranch \
'!f(){ git branch -d && git push origin --delete ; };f'
注意:如果使用
-d
(小写d),则仅在合并分支后才删除该分支。要强制执行删除操作,您将需要使用-D
(大写D)。评论
这就是我想要的。我自己的外壳函数别名不起作用(意外的EOF),我不知道为什么,但这很好用!我所做的唯一更改是将&&替换为;因此,即使第一个命令失败,第二个命令仍将执行(有时仅本地或远程存在)。
–user1021726
2014年12月16日上午8:55
#16 楼
本地和远程删除分支签出到主分支-
git checkout master
删除远程分支-
git push origin --delete <branch-name>
删除本地分支-
git branch --delete <branch-name>
#17 楼
您也可以使用git remote prune origin
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
执行此操作,它会修剪并删除
git branch -r
列表中的远程跟踪分支。#18 楼
除了其他答案,我经常使用git_remote_branch工具。这是一个额外的安装,但是它为您提供了一种与远程分支进行交互的便捷方法。在这种情况下,要删除:grb delete branch
我发现我也经常使用
publish
和track
命令。#19 楼
删除本地和远程的单线命令:D=branch-name; git branch -D $D; git push origin :$D
或将以下别名添加到〜/ .gitconfig中。用法:
git kill branch-name
[alias]
kill = "!f(){ git branch -D \"\"; git push origin --delete \"\"; };f"
评论
⚠️在脚本中谨慎使用git branch -D,因为它会强制删除分支而不检查其是否已合并。使用-d是安全的。
–凯撒索尔
17年3月13日在14:05
#20 楼
删除分支假设我们在分支“联系表单”上的工作已经完成,并且我们已经将其集成到“主”中。由于不再需要它,我们可以将其删除(在本地):
$ git branch -d contact-form
要删除远程分支:
git push origin --delete contact-form
#21 楼
删除远程分支git push origin :<branchname>
删除本地分支
git branch -D <branchname>
删除本地分支步骤:
签出到另一个分支
删除本地分支
评论
之后远程分支删除是否需要“ git push”?
–萨米莎(Samitha Chathuranga)
16-2-17在8:32
@SamithaChathuranga不,git push origin:
–MichałSzajbe
17年9月9日在22:20
#22 楼
简单说:git branch -d <branch-name>
git push origin :<branch-name>
评论
如果它是您自己的分支,则此方法有效。但是,如果您要修剪存储库中所有不需要的分支(其中一些不是您自己的分支),将无法满足需求
–Kermit_ice_tea
16年6月30日在22:23
#23 楼
git push origin --delete <branch Name>
比
更容易记住
git push origin :branchName
#24 楼
现在,您可以使用GitHub Desktop应用程序执行此操作。启动该应用程序后,请单击包含分支的项目
切换到您要删除的分支
从“分支”菜单中,选择“取消发布...”以拥有该分支从GitHub服务器中删除。
从“分支”菜单中,选择“删除“ branch_name” ...”,以具有分支从本地计算机上删除(也就是您正在使用的计算机)
评论
我没有投票,但我的想法是它没有实质性的帮助。问题显然是在不需要使用外部程序的情况下要求提供更多命令行类型的答案,如果人们单击此处,他们可能不会为桌面方式寻找github。
–丹尼尔(Daemedeor)
2015年11月6日,11:51
@Daemedeor,我不同意。在2010年,当OP提出问题时,UI的解决方法并不存在,唯一的选择就是命令行。为了表明您只需要命令行选项,应该在问题中或使用标记命令行界面(在这种情况下不存在)中进行说明。
–埃里克
2015年11月6日在16:00
删除远程分支的git命令很烂,我往往会忘记它(新旧都一样)。幸运的是,有可以选择的GUI工具。 Git Gui,TortoiseGit和GitHub Desktop都有它-我希望Git Extensions也具有此功能。无论如何,当我需要删除远程分支时,我记得是从Git Extensions中启动Git Gui。
–vezenkov
16-3-25在21:59
#25 楼
要在本地删除-(正常)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.
图形表示形式:
#26 楼
如果您具有与远程分支的名称相同的标签,则此方法将不起作用:$ 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
评论
很好,但是人们真的不应该首先使用相同的名称和命名方案来命名其分支和标记。
–user456814
2014年7月29日10:00
好吧,我的情况是我正在将分支转换为标签,并且标签与分支具有相同的名称是有意义的。通过转换,我的意思是将分支B合并到A并用标签B标记分支B中的最后一次提交,以便在删除分支B之后仍可以通过简单地签出标签B轻松地恢复它。
–格雷格
14年7月30日在11:59
#27 楼
其他许多答案将导致错误/警告。这种方法是相对简单的方法,例如,如果尚未完全合并到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
将添加遥控器,而不是将其删除。这是q4312079q实际执行某项操作的示例:用户A执行上述步骤。用户B将运行以下命令以查看最新的远程分支:
git fetch
git remote prune origin
git branch -r
#28 楼
我已经厌倦了使用谷歌搜索这个答案,所以我对crizCraig之前发布的答案采取了类似的方法。我在Bash个人资料中添加了以下内容:
function gitdelete(){
git push origin --delete
git branch -D
}
然后,每当我完成一个分支(例如,合并到
master
中)时,我都会在终端中运行以下命令:gitdelete my-branch-name
...然后从
my-branch-name
以及本地删除origin
。评论
对此进行扩展,--delete“ $ @”和-D“ $ @”代替$ 1将为多个分支处理它。
– Kunl
16年6月27日在13:15
我建议先运行git branch -d(使用小写的“ d”)以确保更改已被合并,然后如果成功则进行推送(在命令之间插入&&)
–bryn
16年7月19日在14:17
#29 楼
在执行之前git branch --delete <branch>
确保通过执行以下操作首先确定远程分支的确切名称:
git ls-remote
这将告诉您准确输入
<branch>
值的内容。 (branch
区分大小写!)#30 楼
使用:git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
如果确定要删除它,请运行
git branch -D bugfix
现在清洁已删除的远程分支机构运行
git remote prune origin
评论
主持人注意:如果您想回答这个问题,请注意已经发布了40个答案。您的新答案会增加实质性价值吗?注意:对于Git 2.5+(2015年第二季度),确切的消息将是“删除的远程跟踪分支”:请参见github.com/git/git/commit/…
跳过前几个答案,然后跳到最佳答案:stackoverflow.com/a/23961231/4561887。要删除git分支,实际上要删除3个不同的分支!这个答案使事实很清楚。
@GabrielStaples如果没有上下文,您的评论会令人困惑。被评为“最佳”答案的答案不知何故?
@Nathan,不,他们没错,但是他们没有教你不知道的东西,而我链接的那个东西使这个关键的未知数变成了已知的未知数,然后又变成了已知的已知数。我不知道您有一个(1)本地分支,2)本地存储的远程跟踪分支和3)远程分支,直到我阅读了该答案。在此之前,我认为只有本地分支机构和远程分支机构。本地存储的远程跟踪分支是一个未知的未知数。使它从最佳状态变为已知状态是最佳答案。