How do I delete a Git branch locally and remotely?
我想删除本地和远程分支。
尝试删除远程分支失败1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ 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. |
要成功删除本地和远程的
执行摘要
1 2 | $ git push --delete <remote_name> <branch_name> $ git branch -d <branch_name> |
注意,在大多数情况下,远程名称是
要删除本地分支,请使用以下方法之一:
1 2 | $ git branch -d branch_name $ git branch -D branch_name |
注:
从Git v1.7.0开始,可以使用
1 | $ git push <remote_name> --delete <branch_name> |
这可能比
1 | $ git push <remote_name> :<branch_name> |
它是在Gitv1.5.0中添加的,用于删除远程分支或标记。
从Git v2.8.0开始,您还可以使用
因此,您安装的Git版本将决定您是否需要使用更简单或更难的语法。
删除远程分支[2010年1月5日的原始答案]从Scott Chacon出版的《pro-git》第3章:
Deleting Remote Branches
Suppose you’re done with a remote branch — say, you and your collaborators are finished with a feature and have merged it into your remote’s master branch (or whatever branch your stable code-line is in). You can delete a remote branch using the rather obtuse syntax
git push [remotename] :[branch] . If you want to delete your server-fix branch from the server, you run the following:
1
2
3Boom. No more branch on your server. You may want to dog-ear this page, because you’ll need that command, and you’ll likely forget the syntax. A way to remember this command is by recalling the
git push [remotename] [localbranch]:[remotebranch] syntax that we went over a bit earlier. If you leave off the[localbranch] portion, then you’re basically saying,"Take nothing on my side and make it be[remotebranch] ."
我发行了
那么你应该在其他机器上执行这个
1 | git fetch --all --prune |
传播更改。
Matthew的答案对于移除远程分支非常有用,我也很欣赏这一解释,但对这两个命令进行简单区分:
要从计算机中删除本地分支,请执行以下操作:
要从服务器中删除远程分支,请执行以下操作:
参考:https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote
简短的回答
如果您想更详细地解释以下命令,请参阅下一节中的长答案。
删除远程分支:
1 2 | git push origin --delete <branch> # Git version 1.7.0 or newer git push origin :<branch> # Git versions older than 1.7.0 |
删除本地分支:
1 2 3 | git branch --delete <branch> git branch -d <branch> # Shorter version git branch -D <branch> # Force delete un-merged branches |
删除本地远程跟踪分支:
1 2 3 4 5 | 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个不同的分支要删除!
当您处理本地和远程删除分支时,请记住涉及三个不同的分支:
使用的原始海报
1 | git branch -rd origin/bugfix |
只删除了他的本地远程跟踪分支
要删除实际的远程分支,需要
1 | git push origin --delete bugfix |
以下部分介绍删除远程和远程跟踪分支时要考虑的其他详细信息。
按删除远程分支也会删除远程跟踪分支请注意,使用
您可以通过运行以下命令来验证远程跟踪分支
1 2 3 4 5 6 7 | # 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
如果您没有从命令行(如上所述)删除远程分支
删除这些过时的远程跟踪分支(因为Git版本1.6.6)的一个典型方法是简单地使用
1 2 | git fetch origin --prune git fetch origin -p # Shorter |
以下是1.6.6发行说明(强调我的)中的相关引用:
"git fetch" learned
--all and--multiple options, to run fetch from
many repositories, and--prune option to remove remote tracking
branches that went stale. These make"git remote update" and"git
remote prune" less necessary (there is no plan to remove"remote
update" nor"remote prune", though).
对于过时的远程跟踪分支,替代上述自动修剪
或者,不必通过
1 2 | git branch --delete --remotes origin/X git branch -dr origin/X # Shorter |
也见
- Git分行(1)手册页。
- Git Fetch(1)手册页。
- pro git§;3.5 git分支-远程分支。
步骤为deleting的分支:
为deleting的remote分支: P / < >
1 | git push origin --delete <your_branch> |
为deleting的当地分支,你有三种方式: P / < >
1 2 3 4 5 | 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 |
explain:好的,只是explain怎么了睾丸。 P / < >
单纯的做
也
我也创建的图像显示到下面的步骤: P / < >
P / < >
还可以使用以下命令删除远程分支
1 | git push --delete origin serverfix |
哪个做的和
1 | git push origin :serverfix |
但它可能更容易记住。
如果要删除分支,请首先签出要删除的分支以外的分支。
1 | git checkout other_than_branch_to_be_deleted |
删除本地分支:
1 | git branch -D branch_to_be_deleted |
删除远程分支:
1 | git push origin --delete branch_to_be_deleted |
提示:删除分支时使用
1 | git branch -d <branchname> # deletes local branch |
或
1 | git push origin :<branchname> # deletes remote branch |
仅删除引用。即使分支实际上是在远程删除的,对它的引用仍然存在于团队成员的本地存储库中。这意味着,对于其他团队成员,删除的分支在执行
为了解决这个问题,您的团队成员可以使用
1 | git remote prune <repository> |
这通常是
1 2 3 | git branch -D <name-of-branch> git branch -D -r origin/<name-of-branch> git push origin :<name-of-branch> |
这很简单:只需运行以下命令:
要在本地和远程删除Git分支,请首先使用以下命令删除本地分支:
1 | git branch -d example |
(此处
然后使用命令删除远程分支:
1 | git push origin :example |
另一种方法是:
1 | git push --prune origin |
警告:这将删除本地不存在的所有远程分支。或者更全面地说,
1 | git push --mirror |
将有效地使远程存储库看起来像存储库的本地副本(本地头、远程设备和标记在远程设备上镜像)。
我在bash设置中使用以下内容:
1 | alias git-shoot="git push origin --delete" |
然后你可以打电话:
1 | git-shoot branchname |
自2013年1月以来,Github在"分支"页面的每个分支旁边都包含一个elete Branch按钮。
相关博客文章:创建和删除分支
如果您想用一个命令来完成这两个步骤,您可以通过将以下内容添加到您的
1 2 | [alias] rmbranch ="!f(){ git branch -d ${1} && git push origin --delete ${1}; };f" |
或者,您可以使用命令行将其添加到全局配置中。
1 2 | git config --global alias.rmbranch \ '!f(){ git branch -d ${1} && git push origin --delete ${1}; };f' |
注意:如果使用
本地删除:
要删除本地分支,可以使用:
1 | git branch -d <branch_name> |
要强制删除分支,请使用
1 | git branch -D <branch_name> |
远程删除:
有两种选择:
1 2 3 | git push origin :branchname git push origin --delete branchname |
我建议你用第二种方式,因为它更直观。
本地和远程删除分支
主分行结帐-
git checkout master 删除远程分支-
git push origin --delete 。删除你当地的分支机构-
git branch --delete 。
您也可以使用
1 2 3 4 | $ git remote prune origin Pruning origin URL: [email protected]/yourrepo.git * [pruned] origin/some-branchs |
它从
除了其他答案,我还经常使用git_远程_分支工具。这是一个额外的安装,但它为您提供了一种与远程分支交互的便捷方式。在这种情况下,删除:
1 | grb delete branch |
我发现我也经常使用
一个liner命令删除本地和远程:
或者将下面的别名添加到您的~/.gitconfig;用法:
1 2 | [alias] kill ="!f(){ git branch -D "$1"; git push origin --delete "$1"; };f" |
删除分支
Let's assume our work on branch"contact-form" is done and we've already integrated it into"master". Since we don't need it anymore, we can delete it (locally):
1 $ git branch -d contact-form
删除远程分支:
1 | git push origin --delete contact-form |
删除远程分支
删除本地分支
删除本地分支步骤:
简单地说:
1 2 | git branch -d <branch-name> git push origin :<branch-name> |
现在您可以使用Github桌面应用程序来完成它。
启动应用程序后
1 | git push origin --delete <branch Name> |
比…更容易记住
1 | git push origin :branchName |
要删除locally(正常的), P / < >
1 | git branch -d my_branch |
如果你的公司是在rebasing /合并和进步,这是不做的properly意味着,你会得到一个错误的
所以要么你需要不能解决rebasing /合并另有你可以做力通过删除不使用的, P / < >
1 | git branch -d my_branch |
要删除在remote: P / < >
1 | git push --delete origin my_branch |
能做同样的使用, P / < >
1 | git push origin :my_branch # easy to remember both will do the same. |
graphical representation, P / < >
P / < >
如果您有一个与远程分支同名的标记,则此操作将不起作用:
1 2 3 | $ 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' |
在这种情况下,需要指定要删除分支,而不是标记:
1 | git push origin :refs/heads/branch-or-tag-name |
同样,要删除标记而不是分支,您将使用:
1 | git push origin :refs/tags/branch-or-tag-name |
我厌倦了谷歌搜索这个答案,所以我采取了类似的方法。克里茨克雷格早些时候发表的答案。
将以下内容添加到我的bash配置文件中:
1 2 3 4 | function gitdelete(){ git push origin --delete $1 git branch -D $1 } |
然后,每当我完成一个分支(例如合并到
1 | gitdelete my-branch-name |
…然后从
许多其他答案将导致错误/警告。这种方法相对来说比较简单,但是如果没有完全合并到
1 2 3 | git checkout some_other_branch git push origin :branch_to_delete git branch -d branch_to_delete |
如果删除了远程分支,则不需要进行远程修剪。它只用于获取您正在跟踪的存储库中可用的最新远程设备。我已经观察到,
用户A执行上述步骤。用户B将运行以下命令以查看最新的远程分支
1 2 3 | git fetch git remote prune origin git branch -r |
执行前
1 | git branch --delete <branch> |
确保首先通过执行以下操作确定远程分支的确切名称:
1 | git ls-remote |
这将告诉您要为
1 2 | git push origin :bugfix # Deletes remote branch git branch -d bugfix # Must delete local branch manually |
如果确定要删除,请运行
1 | git branch -D bugfix |
现在要清除已删除的远程分支,请运行
1 | git remote prune origin |
把所有其他答案混为一谈。需要
调用这个文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/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" Continuing." `git branch -D #{branch_name}` `git branch -D -r origin/#{branch_name}` `git push origin --delete #{branch_name}` else puts" Quitting." end end |
我的别名添加到我的
1 2 3 4 5 6 | [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" |
删除远程分支的命令行的另一个选项是github分支页面。
例如,请参见:https://github.com/angular/angular.js/branches
在Github存储库的
我自己通常更喜欢命令行,但是这个Github页面向您展示了更多关于分支的信息,比如最近更新的日期和用户,以及前后提交的数量。它在处理大量分支时很有用。
我也有类似的问题,这似乎是可行的:这将删除本地分支。
这将删除远程分支
来源:Makandra卡
有一个很好的答案,但是,如果您有大量的分支,那么在本地和远程逐个删除它们,这将是一项非常繁琐的任务。您可以使用此脚本自动执行此任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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分支
你可以用gitbash execute *以下: P / < >
1 | git branch --delete <branch> |
或
从github桌面应用程序,当你有分支检查出来,你可以删除的当地分支的分支通过菜单条: P / < >
P / < >
如果你是没有用的github桌面和应用程序,使用的是这里像视觉工作室为你的本地源控制,所有你需要做的是在一对夫妇的快速的步骤: P / < >
然后,我在给你logged github在线帐户,让repository和点击的所有branches标签。从那里,只是点击小图标上的垃圾可以顺利的名称为"brach你希望删除。 P / < >
P / < >
保持在所有的分支-如果不是很published,没有需要去删除它从你的在线repository。 P / < >
我convenient雅的以下功能在我的.bash _别名文件: P / < >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 } |
根据latest文件使用的终端,我们可以删除以下的方式。 P / < >
删除在当地的: P / < >
1 | git branch -D usermanagement |
删除在remote位置: P / < >
1 | git push --delete origin usermanagement |
Its very simple
要删除remote分支 P / < >
1 | git push -d origin <branch-name> |
或 P / < >
1 | git push origin :<branch-name> |
删除到当地的分支 P / < >
1 | git branch -D <branch-name> |
我用在我的bash的以下设置: P / < >
1 | alias git-shoot="git push origin --delete" |
然后你可以打电话: P / < >
1 | git-shoot branchname |