如何删除本地和远程 Git 分支
删除本地分支用 git branch -d <分支名>(有未合并改动时用 -D 强删);删除远程分支用 git push origin --delete <分支名>。两步缺一不可,删远程分支前请确认已合并或已备份。
分两步:本地用 git branch -d 分支名 删除(有未合并改动时 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 branch --merged main | grep -v '^\*\|main' | xargs git branch -d
列出已合并进 main 的本地分支(排除当前分支和 main 本身)逐个删除。
常见问题(FAQ)
Q:删除分支后提交会丢吗?
只要提交已合并进其他分支就不会丢。强删(-D)未合并分支后,提交变成孤立对象,短期内还能通过 git reflog 找到哈希再 git branch 恢复 <hash> 救回,但对象一旦被垃圾回收清理,就不能再依靠 Git 对象库恢复。
Q:报错 "Cannot delete branch checked out at"?
你正站在要删的分支上。先 git checkout main 再删。
Q:远程分支删除后别人本地还有吗?
有。删除只影响远程服务器;其他协作者本地引用要自己跑 git fetch --prune 清理。