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

删除本地分支用 git branch -d <分支名>(须合并到上游,无上游时检查 HEAD;确认可丢弃时才用 -D);删除远程分支用 git push origin --delete <分支名>。本地与远程是独立引用,按清理目标选择,删远程分支前请确认已合并或已备份。

最佳实践
Git 分支协作与合并示意

分两步:本地用 git branch -d 分支名 删除(未合并到配置的上游(无上游时为 HEAD)时 Git 会拒绝,确认不要了用 -D 强制);远程用 git push origin --delete 分支名 删除。本地和远程是两个独立的引用,删一边不影响另一边,通常两边都要清理。

标准操作

# 1. 先切到别的分支(不能删除当前所在分支)
git checkout main

# 2. 删除本地分支
git branch -d feature-x        # 安全删除(已合并才允许)
git branch -D feature-x        # 强制删除(丢弃未合并改动)

# 3. 删除远程分支
git push origin --delete feature-x

清理过期的远程引用

别人删了远程分支后,你本地的 origin/feature-x 引用还在,用下面的命令同步清理:

git fetch --prune              # 拉取并清理已删除的远程分支引用
git remote prune origin        # 只清理不拉取

批量清理已合并分支

git for-each-ref --merged=main --format='%(refname:short)' refs/heads/
# 核对精确名称、当前/其他 worktree 分支后,只删除选中的分支
git branch -d feature-x

先列出合并候选,再明确选择名称删除;不要靠字符串包含 main 的筛选批量删。

常见问题(FAQ)

Q:删除分支后提交会丢吗?

只要提交已合并进其他分支就不会丢。强删(-D)未合并分支后,提交变成孤立对象,分支自身的 reflog 也会删除;若其他 reflog(如 HEAD)或引用仍记录该哈希,可以再 git branch 恢复 <hash> 救回,但对象一旦被垃圾回收清理,就不能再依靠 Git 对象库恢复。

Q:报错 "Cannot delete branch checked out at"?

该分支可能在当前或其他关联 worktree 检出;用 git worktree list 确认并在对应 worktree 切换或妥善处理后再删。

Q:远程分支删除后别人本地还有吗?

有。删除只影响远程服务器;其他协作者用 git fetch --prune 清理远程跟踪引用;自己的本地分支不会因此删除。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台