我想在本地和远程删除一个分支。
尝试删除远程分支失败
$ 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
分支,我应该做些什么不同的事情?
deleted remote-tracking branch
”:请参阅 github.com/git/git/commit/…
执行摘要
$ git push -d <remote_name> <branchname>
$ git branch -d <branchname>
注意:在大多数情况下,<remote_name>
将是 origin
。
删除本地分支
要删除本地分支,请使用以下方法之一:
$ git branch -d <branch_name>
$ git branch -D <branch_name>
-d 选项是 --delete 的别名,它只删除已经完全合并到上游分支中的分支。
-D 选项是 --delete --force 的别名,它删除“不管其合并状态如何”的分支。 [来源:man git-branch]
从 Git v2.3 开始, git branch -d (delete) 学会了尊重 -f (force) 标志。
如果您尝试删除当前选定的分支,您将收到错误消息。
删除远程分支
从 Git v1.7.0 起,您可以使用删除 remote 分支
$ 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 日的原始答案]
来自 Scott Chacon 的 Pro Git 的第 3 章:
删除远程分支 假设你已经完成了一个远程分支——比如说,你和你的合作者完成了一个功能并将它合并到远程的主分支(或者你的稳定代码行所在的任何分支)。您可以使用相当钝的语法 git push [remotename] :[branch] 删除远程分支。如果要从服务器中删除 server-fix 分支,请运行以下命令:
$ 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 上回答这个问题,实际上是狗耳朵)。
然后你应该在其他机器上执行这个
# Fetch changes from all remotes and locally delete
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune
传播更改。
Matthew's answer 非常适合删除 remote 分支,我也很欣赏解释,但要简单区分这两个命令:
要从您的机器中删除本地分支:
git branch -d {the_local_branch}
(使用 -D
强制删除分支而不检查合并状态)
要从服务器中删除远程分支:
git push origin --delete {the_remote_branch}
参考:Git: Delete a branch (local or remote)
-D
强制删除,-d
如果尚未合并,则会向您发出警告。
'git branch -d your_branch
,那么您将出现类似 error: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
的错误
git remote prune <name>
(例如 git remote prune origin
),以便在本地删除远程中不再存在的陈旧分支。
git branch -a --merged origin/master
它会列出所有分支,包括本地和远程;已合并到master中。 Additional information here
简短的答案
如果您想对以下命令进行更详细的解释,请参阅下一节中的长答案。
删除远程分支
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。
https://i.stack.imgur.com/NLAqw.png
使用的原始海报:
git branch -rd origin/bugfix
这仅删除了他的本地远程跟踪分支 origin/bugfix
,而不是 origin
上的实际远程分支 bugfix
。
https://i.stack.imgur.com/iCONz.png
要删除该实际的远程分支,您需要
git push origin --delete bugfix
https://i.stack.imgur.com/6Z3GY.png
额外细节
以下部分描述了删除远程和远程跟踪分支时要考虑的其他详细信息。
推送删除远程分支也会删除远程跟踪分支
请注意,使用 git push
从命令行删除远程分支 X
也会删除本地远程跟踪分支 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 开始)的典型方法是简单地使用 --prune
或更短的 -p
运行 git fetch
。 请注意,这会删除远程上不再存在的任何远程分支的所有过时的本地远程跟踪分支:
git fetch origin --prune
git fetch origin -p # Shorter
以下是来自 1.6.6 release notes 的相关引用(强调我的):
“git fetch” 学习了 --all 和 --multiple 选项,从许多存储库运行 fetch,以及 --prune 选项来删除过时的远程跟踪分支。这些使“git remote update”和“git remote prune”变得不那么必要(虽然没有计划删除“remote update”或“remote prune”)。
对过时的远程跟踪分支进行上述自动修剪的替代方案
或者,不要通过 git fetch -p
修剪过时的本地远程跟踪分支,您可以通过使用 --remotes
或 -r
手动删除分支来避免进行额外的网络操作标志:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
也可以看看
git-branch(1) 手册页。
git-fetch(1) 手册页。
Pro Git § 3.5 Git 分支 - 远程分支。
X
和 origin/X
书签(2 个分支),然后远程有 X
(创建 3 个分支)。
git push origin --delete <branch>
,据我所知,ALSO 也会删除本地存储的名为 origin/branch
的远程跟踪分支。因此,要在一个命令中删除远程分支和本地存储的远程跟踪分支,只需使用 git push origin --delete <branch>
。 然后,您只需使用 git branch -D branch
删除本地分支。这涵盖了仅用 2 个命令删除所有 3 个分支。
删除分支的步骤:
删除远程分支:
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
,它会引发与分支合并状态相关的错误...
我还创建了下面的图像来显示步骤:
https://i.stack.imgur.com/AKWYx.jpg
git branch -a
将显示本地和远程分支。这将有助于您介绍图表。
git remote prune origin
您的已删除分支的本地副本不会因此而删除。使用 git fetch --prune
可以达到相同的效果
您还可以使用以下内容删除远程分支
git push --delete origin serverfix
哪个做同样的事情
git push origin :serverfix
但它可能更容易记住。
git branch -d <local_branch>
或 git branch -D <local_branch>
强制删除
这很简单:
删除远程分支
git push -d origin <branch-name>
或者
git push origin :<branch-name>
-- 你也可以用这种语法删除标签
强制删除本地分支
git branch -D <branch-name>
注意:删除远程分支后在其他机器上执行git fetch --all --prune
,以删除过时的跟踪分支。
例子
删除本地分支
git branch -D my-local-branch
删除远程分支
git push origin :my-remote-branch
提示:如果您想查看所有可用的分支,您可以使用 git branch -a
,
要查看远程分支,您可以使用 git branch -r
--delete
而不是 -d
来删除远程分支。
-d
选项是 --delete
的别名,如果 --delete
有效,那么 -d
也应该有效,如果您想强制删除一个分支,您可以使用 -D
而不是 -d
或 --delete
。
-d
对我不起作用。终端告诉我改用 -D
提示:当您使用删除分支时
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
操作会删除本地分支和远程分支。
git remote prune
是删除过时远程跟踪分支的一种有些过时的方法,较新的方法是使用 git fetch --prune
或 git fetch -p
。
如果要删除一个分支,首先checkout到要删除的分支以外的分支。
git checkout other_than_branch_to_be_deleted
删除本地分支:
git branch -D branch_to_be_deleted
删除远程分支:
git push origin --delete branch_to_be_deleted
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
-D
强制删除。最好使用 -d
,它会提醒您是否需要做一些危险的事情。
这很简单:只需运行以下命令:
要在本地和远程删除 Git 分支,首先使用以下命令删除本地分支:
git branch -d example
(这里 example
是分支名称。)
之后,使用以下命令删除远程分支:
git push origin :example
另一种方法是:
git push --prune origin
警告:这将删除本地不存在的所有远程分支。或者更全面地说,
git push --mirror
将有效地使远程存储库看起来像存储库的本地副本(本地头、远程和标签在远程上镜像)。
我在 Bash 设置中使用以下内容:
alias git-shoot="git push origin --delete"
然后你可以调用:
git-shoot branchname
git push origin --delete $1
放入名为 git-shoot
的路径上的文件中,git shoot branchname
也将起作用。
本地删除:
要删除本地分支,您可以使用:
git branch -d <branch_name>
要强制删除分支,请使用 -D
而不是 -d
。
git branch -D <branch_name>
远程删除:
有两种选择:
git push origin :branchname
git push origin --delete branchname
我建议您使用第二种方式,因为它更直观。
如果您想用一个命令完成这两个步骤,您可以通过将以下内容添加到 ~/.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)。
&&
替换为 ;
,这样即使第一个命令失败,第二个命令仍然会执行(有时只存在本地或只存在远程)。
自 2013 年 1 月以来,GitHub 在您的“分支”页面中的每个分支旁边都包含一个删除分支按钮。
相关博文:Create and delete branches
在本地和远程删除您的分支
结帐到主分支 - git checkout master
删除你的远程分支 - git push origin --delete
删除您的本地分支 - git branch --delete
您也可以使用 git remote prune origin
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
它从 git branch -r
列表中修剪和删除远程跟踪分支。
除了其他答案,我经常使用 git_remote_branch 工具。这是一个额外的安装,但它为您提供了一种与远程分支交互的便捷方式。在这种情况下,要删除:
grb delete branch
我发现我也经常使用 publish
和 track
命令。
删除本地和远程的单行命令:
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"
git branch -D
,因为它会强制删除分支而不检查它是否已合并。使用 -d
是安全的。
假设我们在分支“contact-form”上的工作已经完成,并且我们已经将它集成到“master”中。由于我们不再需要它,我们可以(在本地)删除它: $ git branch -d contact-form
对于删除远程分支:
git push origin --delete contact-form
删除远程分支
git push origin :<branchname>
删除本地分支
git branch -D <branchname>
删除本地分支步骤:
结帐到另一个分支删除本地分支
git push origin :<branchname>
已经将“空”分支推送到远程(因此删除了远程分支)
简单地说:
git branch -d <branch-name>
git push origin :<branch-name>
本地删除 - (正常)
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.
图示:
https://i.stack.imgur.com/Y7NmS.png
git push origin --delete <branch Name>
比记忆更容易
git push origin :branchName
现在您可以使用 GitHub Desktop 应用程序来做到这一点。
启动应用程序后
单击包含分支的项目 切换到您要删除的分支 从“分支”菜单中,选择“取消发布...”,以从 GitHub 服务器中删除该分支。从“Branch”菜单中,选择“Delete “branch_name”...”,将分支从您的本地机器(也就是您当前正在使用的机器)中删除
如果您有一个与远程分支同名的标签,这将不起作用:
$ 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
git push origin :refs/heads/main
时,我仍然得到相同的错误 error: failed to push some refs to 'https://github.com/tik9/tik9.github.io'
。可能 github
是罪魁祸首。
remote: ! Push rejected, cannot delete main branch
许多其他答案将导致错误/警告。这种方法是相对简单的,尽管例如,如果它没有完全合并到 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
我厌倦了在谷歌上搜索这个答案,所以我之前对 the answer that crizCraig posted 采取了类似的方法。
我在我的 Bash 个人资料中添加了以下内容:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
然后,每次我完成一个分支(例如合并到 master
)时,我都会在终端中运行以下命令:
gitdelete my-branch-name
...然后从 origin
以及本地删除 my-branch-name
。
--delete "$@"
和 -D "$@"
而不是 $1
将为多个分支处理它。
git branch -d
(带有小写“d”)以确保更改已合并,然后在成功时推送(将 &&
放在命令之间)
根据使用终端的最新文档,我们可以通过以下方式删除。
本地删除:
git branch -D usermanagement
远程删除:
git push --delete origin usermanagement
git
命令如此不一致且难以记住。看删除,一个是-D
,另一个是-d|--delete
-d, --delete
选项。 -D
是 --delete --force
的快捷方式。
利用:
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
如果您确定要删除它,请运行
git branch -D bugfix
现在清理已删除的远程分支运行
git remote prune origin
git fetch --all --prune
。 |||在用git branch -d
删除本地分支并用git push origin --delete
删除远程分支后,其他机器可能仍然有“过时的跟踪分支”(看到它们做git branch -a
)。要摆脱这些,请执行git fetch --all --prune
。git branch -a
查看所有分支外,您还可以使用git branch -r
仅查看远程分支。另见git remote show origin
- 来源:gitready.com/intermediate/2009/02/13/list-remote-branches.htmlgit branch -D Branch_Name
才能摆脱本地分支