一个功能开发完合进主干,分支就没人管了,时间一长 git branch 一刷,十几行全是半年前的旧分支。git删除本地分支只要一条命令,但 -d 和 -D 的区别得先搞清楚,用错了可能把没合并的工作一起带走。

两条删除命令的区别

git branch -d feature-login
git branch -D feature-login

小写 d 是安全删除:分支还没合并进当前分支时,git 会拒绝并提示 not fully merged,等于给你一道保险,防止误删没保存的工作。大写 D 是强制删除,不管合没合并直接删掉,确认分支真不要了再用。

删之前先确认状态

两条命令配合着用更稳:

git branch --merged
git branch -vv

第一条列出已经合并进当前分支的分支,这些用 -d 删没有风险;第二条能看到每个分支领先落后多少提交,明显还没合并的先别急着动。

分支太多时批量清理

本地分支堆到几十个的时候,一条条看太累,直接列出并入主干的部分:

git branch --merged main

这条列出已经并入 main 的分支,把 main 自己和开发主干排除掉,剩下的基本都能安全删。有人喜欢写成一段管道命令一次删完,确实省事,但执行前务必把待删列表再过目一遍,团队仓库里删错别人的分支很伤感情。

两个常见报错

  • 提示 Cannot delete branch checked out at:你正站在要删的分支上,先 git switch main 或者 git checkout main 切到别的分支再删。
  • 本地删了远程还在:git删除本地分支不影响远程仓库,删远程要用 git push origin --delete 分支名,那是另一条命令,别混。

手滑删错了怎么找回

强制删掉的分支其实没那么容易丢。敲 git reflog,在记录里找到删除前指向的提交哈希,然后 git branch 分支名 哈希值,分支就回来了。前提是那个提交还没被垃圾回收,一般几天之内都来得及。

习惯上的取舍:合并过的分支合完就删,本地远程一起清干净;还没合并又拿不准的,先用 -d 试一次,git 拦下来了说明里面还有活儿,看完提交记录再决定要不要上 -D。