我想在本地和远程删除分支。
$ 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
本地和远程分支?
答案 0 :(得分:19057)
$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
请注意,在大多数情况下,远程名称为origin
。
要删除本地分支,请使用以下某个选项:
$ git branch -d branch_name
$ git branch -D branch_name
注意: -d
选项是--delete
的别名,只有在已经在其上游分支中完全合并的情况下才会删除该分支。您还可以使用-D
,它是--delete --force
的别名,删除分支“无论其合并状态如何”。 [来源:man git-branch
]
自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开始,您还可以使用git push
-d
选项作为--delete
的别名。
因此,您安装的Git版本将决定您是否需要使用更简单或更难的语法。
来自Scott Chacon的Pro Git第3章:
删除远程分支
假设您已完成远程分支 - 例如,您和您的协作者已完成某项功能并已将其合并到您的远程主分支(或您的稳定代码行所在的任何分支)。您可以使用相当钝的语法
git push [remotename] :[branch]
删除远程分支。如果要从服务器中删除服务器修复分支,请运行以下命令:$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix
动臂。您的服务器上没有更多分支。您可能想要了解此页面,因为您需要该命令,并且您可能会忘记语法。记住这个命令的一种方法是回忆一下我们之前讨论过的
git push [remotename] [localbranch]:[remotebranch]
语法。如果你放弃[localbranch]
部分,那么你基本上就是说:“不要采取任何行动,将其变为[remotebranch]
。”
我发布了git push origin :bugfix
并且效果很好。 Scott Chacon是对的 - 我想要dog ear那个页面(或者通过在Stack Overflow上回答这个问题,实际上是狗耳朵)。
然后你应该在其他机器上执行它
git fetch --all --prune
传播变化。
答案 1 :(得分:3029)
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
答案 2 :(得分:1752)
如果您想要更详细地解释以下命令,请参阅下一节中的长答案。
删除远程分支:
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个不同的分支:
X
。X
。origin/X
的本地远程跟踪分支X
。
使用原始海报
git branch -rd origin/bugfix
仅删除了本地远程跟踪分支 origin/bugfix
,而不是bugfix
上的实际远程分支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
如果您没有从命令行删除远程分支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 release notes(强调我的)的相关引用:
&#34; git fetch&#34;了解了
--all
和--multiple
选项,以便从中运行获取 许多存储库和--prune
选项可删除远程跟踪 过时的分支。这些使得&#34; git远程更新&#34;和&#34; git 远程修剪&#34;不太必要(没有计划删除&#34;远程 更新&#34;也不是&#34;远程修剪&#34;,但是)。
或者,不是通过git fetch -p
,修剪过时的本地远程跟踪分支,而是通过仅使用{{{p}手动删除分支来避免进行额外的网络操作。 1}}或--remote
标志:
-r
答案 3 :(得分:1268)
删除远程分支:
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
仅删除远程分支,在末尾添加分支的名称,这将删除并同时将其推送到远程... < / p>
另外,git branch -D
,只删除本地分支仅!...
-D
代表--delete --force
,它会删除分支,即使它没有合并(强制删除),但你也可以使用-d
代表--delete
抛出一个分支合并状态的错误...
我还创建了下面的图片以显示步骤:
答案 4 :(得分:751)
您还可以使用以下命令删除远程分支
git push --delete origin serverfix
与
相同git push origin :serverfix
但可能更容易记住。
答案 5 :(得分:358)
如果要删除分支,请先检查除要删除的分支以外的分支。
git checkout other_than_branch_to_be_deleted
删除本地分支:
git branch -D branch_to_be_deleted
删除远程分支:
git push origin --delete branch_to_be_deleted
答案 6 :(得分:354)
提示:使用
删除分支时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
。
答案 7 :(得分:257)
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
答案 8 :(得分:221)
这很简单:只需运行以下命令:
要在本地和远程删除Git分支,请先使用以下命令删除本地分支:
git branch -d example
(此处example
是分支名称)
然后使用命令删除远程分支:
git push origin :example
答案 9 :(得分:191)
另一种方法是: -
git push --prune origin
警告: 这将删除本地不存在的所有远程分支。或更全面,
git push --mirror
将有效地使远程存储库看起来像存储库的本地副本(本地磁头,远程控制器和标签在远程上镜像)。
答案 10 :(得分:161)
答案 11 :(得分:128)
自2013年1月起,GitHub在“分支”页面的每个分支旁边都包含删除分支按钮。
答案 12 :(得分:120)
如果您想通过一个命令完成这两个步骤,可以通过在~/.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)。
答案 13 :(得分:119)
在本地删除:
要删除本地分支,您可以使用:
git branch -d <branch_name>
要强制删除分支,请使用-D
代替-d
。
git branch -D <branch_name>
远程删除:
有两种选择:
git push origin :branchname
git push origin --delete branchname
我建议您使用第二种方式,因为它更直观。
答案 14 :(得分:112)
在本地和远程删除分支
结帐至主分行 - onmouseover="jQuery(this).css('background-image','url('<?php echo $ur;?>')');"
删除远程分支 - git checkout master
删除您的本地分支 - git push origin --delete <branch-name>
答案 15 :(得分:107)
您也可以使用git remote prune origin
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
它从git branch -r
列表修剪和删除远程跟踪分支。
答案 16 :(得分:104)
除了其他答案,我经常使用git_remote_branch工具。这是一个额外的安装,但它为您提供了一种与远程分支机构进行交互的便捷方式。在这种情况下,要删除:
grb delete branch
我发现我也经常使用publish
和track
命令
答案 17 :(得分:93)
单行命令删除本地和远程:
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"
答案 18 :(得分:91)
让我们假设我们在分支“联系表单”上的工作已经完成,我们已经将它集成到“master”中。由于我们不再需要它,我们可以删除它(本地):
$ git branch -d contact-form
删除远程分支:
git push origin --delete contact-form
答案 19 :(得分:86)
删除远程分支
git push origin :<branchname>
删除本地分支
git branch -D <branchname>
删除本地分支步骤:
答案 20 :(得分:85)
简单地说:
git branch -d <branch-name>
git push origin :<branch-name>
答案 21 :(得分:79)
现在,您可以使用GitHub Desktop应用
进行此操作启动应用后
答案 22 :(得分:78)
git push origin --delete <branch Name>
比
更容易记住git push origin :branchName
答案 23 :(得分:73)
要在本地删除 - (正常),
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.
图形表示,
答案 24 :(得分:64)
如果您的标签与遥控器上的分支同名,则无法使用
$ 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
答案 25 :(得分:51)
许多其他答案都会导致错误/警告。这种方法相对简单,但如果它未完全合并到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
答案 26 :(得分:49)
我厌倦了谷歌搜索这个答案,所以我采取了类似的方法 到the answer that crizCraig posted之前。
在我的Bash个人资料中添加了以下内容:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
然后每当我完成一个分支(例如合并到master
)时,我在终端中运行以下命令:
gitdelete my-branch-name
...然后从my-branch-name
以及本地删除origin
。
答案 27 :(得分:45)
执行前
git branch --delete <branch>
确保首先通过执行确定远程分支的确切名称:
git ls-remote
这将告诉您输入<branch>
值的确切内容。 (branch
区分大小写!)
答案 28 :(得分:44)
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
如果您确定要删除它,请运行
git branch -D bugfix
现在清理已删除的远程分支运行
git remote prune origin
答案 29 :(得分:43)
所有其他答案的混搭。在OS X上需要Ruby 1.9.3+
,仅测试 。
调用此文件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
答案 30 :(得分:39)
我在.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"
答案 31 :(得分:32)
删除远程分支的命令行的另一个选项是 GitHub分支页。
例如参见:https://github.com/angular/angular.js/branches
在Code
- &gt;中找到GitHub存储库的Branches
页面。
我自己更喜欢命令行,但 GitHub页面会显示有关分支的更多信息,例如上次更新日期和用户,以及数量提前和落后。处理大量分支时很有用。
答案 32 :(得分:30)
我也有类似的问题,这似乎有效:
这会删除本地分支。
git branch -d the_local_branch
这将删除远程分支
git push origin :the_remote_branch
答案 33 :(得分:28)
有很好的答案,但是,如果你有大量的分支机构,在本地和远程一个一个地删除它们将是一项单调乏味的任务。您可以使用此脚本自动执行此任务。
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
答案 34 :(得分:23)
使用 GitBash ,您可以执行以下操作:
git branch --delete <branch>
在GitHub桌面应用中,当您检出分支时,可以通过 Branch 菜单条删除本地分支:
如果你不使用GitHub桌面应用程序,并且使用像Visual Studio这样的IDE来进行本地源代码控制,那么您只需要几个简单的步骤:
答案 35 :(得分:19)
我在.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
}
答案 36 :(得分:19)
根据使用终端的最新文件我们可以删除以下方式。
在本地删除:
git branch -D usermanagement
在远程位置删除:
git push --delete origin usermanagement
答案 37 :(得分:17)
非常简单
删除远程分支
git push -d origin <branch-name>
OR
git push origin :<branch-name>
删除本地分支
git branch -D <branch-name>
答案 38 :(得分:4)
前几种方法对我不起作用,
假设您有以下分支和远程分支,
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
就是这样。干杯。
答案 39 :(得分:3)
最灵活的方法是使用custom Git command。例如,在$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 push origin --delete <branch_name>
还会删除本地远程跟踪分支(默认情况下为origin/<branch_name>
),因此无需担心。
答案 40 :(得分:3)
本地
使用命令
git branch -D <branch_name_1> <branch_name_2> <branch_name_1>
来自位置
转到 ~/ProjectLocation/.git/refs/heads/ 可以看到带有分支名称的文件,可以选择和删除文件
远程
使用以下任一 Git 命令
git push origin --delete <branch_name>
git push origin -d <branch_name>
git push origin :<branch_name>