git branch -d 不能随便用,因为它强制删除未合并分支,跳过所有安全检查,一旦误删含未推送提交、rebase中断状态或ci依赖的分支,数据将永久丢失且不可回滚。

强制删本地分支前,必须确认它真没用——git branch -D 不会警告、不回滚、不救你。
为什么 git branch -D 不能随便用
它绕过所有合并检查,直接抹掉分支指针。如果这个分支还挂着未 git push 的提交、正在 rebase 中断的状态、或被 CI 脚本隐式依赖(比如 ci/build-123),删完就彻底丢内容。
-
git branch -d feat/login报错error: The branch 'feat/login' is not fully merged.→ 别急着换-D,先跑git log --oneline feat/login ^main看有没有独有提交 - 分支刚被
merge --squash进 main,--merged会漏判 → 改用git merge-base --is-ancestor feat/login main && echo "安全" - 在 IDE 里点「Delete Branch」又勾了「Force delete」,等同于
-D,但没给你看提交差异 —— 建议关掉这个选项
git branch --merged 的基准分支必须手动切对
这个命令永远以「当前所在分支」为比对目标。你想查 feat/login 是否已进 main,就得先 git checkout main,再执行命令。否则结果是反的:它告诉你哪些分支被 feat/login 合并了。
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
- 输出里带
*的是当前分支,其余不带*的才是「已合并进当前分支」的候选 -
git branch --merged origin/main可跨远程比对,但得先git fetch,否则origin/main是旧的 - 如果输出为空,不代表没合并——可能是 fast-forward 后又
reset了,这时git merge-base main feat/login返回非空 hash 才算真正有继承关系
删完本地分支,git log 还能看到旧提交?正常
分支只是指向某个 commit 的指针,删分支 ≠ 删 commit。只要那些提交还在引用链上(比如被 main、tag 或 reflog 记着),git log --all 就能扫出来。reflog 默认保留 90 天,所以误删后还能抢救:
- 找被删分支最后的 commit:
git reflog | grep feat/login - 恢复分支:
git branch feat/login abc1234(abc1234 是 reflog 里对应的 hash) - 但 reflog 是本地的,别人仓库里没有;远程分支删了也没 reflog 可靠
真正容易被忽略的是:删分支不是终点,而是清理链条的第一环。后续是否要同步删远程、是否要 unset-upstream、是否要通知 CI 配置更新——这些动作漏掉一个,就可能让下一次 git pull 报 fatal: couldn't find remote ref 或构建静默失败。










