好的,删除 Git 分支分为删除本地分支和删除远程分支两种情况。下面是详细的命令和说明。

删除本地分支

1. 安全删除(已合并的分支)

git branch -d <分支名>

示例:

git branch -d feature/login

2. 强制删除(未合并的分支)

如果分支还没有合并到当前分支,但确定要删除,使用大写的 -D 参数:

git branch -D <分支名>

示例:

git branch -D experiment/untested-feature

删除远程分支

1. 删除远程分支

git push origin --delete <远程分支名>

或者等价的简写形式:

git push origin :<远程分支名>

示例:

git push origin --delete feature/login
# 或
git push origin :feature/login

完整操作流程

步骤 1:查看所有分支

# 查看本地分支(当前分支前有 * 号)
git branch

# 查看所有分支(包括远程分支)
git branch -a

# 查看远程分支
git branch -r

步骤 2:切换到其他分支(不能删除当前所在分支)

# 切换到主分支或其他分支
git checkout main
# 或
git switch main

步骤 3:删除分支

# 删除本地分支
git branch -d feature/login

# 删除远程分支
git push origin --delete feature/login

常用场景和示例

场景 1:删除已合并的功能分支

# 查看分支列表
git branch

# 切换到主分支
git checkout main

# 确保分支已合并(可选)
git merge --abort

# 删除本地分支
git branch -d feature/user-authentication

# 删除远程分支
git push origin --delete feature/user-authentication

场景 2:强制删除未合并的分支

# 切换到主分支
git checkout main

# 强制删除本地分支(即使未合并)
git branch -D experiment/failed-idea

# 删除远程分支
git push origin --delete experiment/failed-idea

场景 3:批量清理已合并的分支

# 删除所有已合并到当前分支的本地分支(保留主分支)
git branch --merged | grep -v "\*" | grep -v "main" | xargs -n 1 git branch -d

# 删除远程已合并的分支(需要先同步)
git fetch --prune

实用技巧和注意事项

1. 删除前确认分支状态

# 查看分支最后的提交
git show-branch <分支名>

# 查看分支是否已合并
git branch --merged    # 查看已合并的分支
git branch --no-merged # 查看未合并的分支

2. 同步远程分支信息

删除远程分支后,本地可能还保留着远程跟踪分支的缓存,需要清理:

# 获取最新远程信息并清理已删除的远程分支跟踪
git fetch --prune
# 或
git remote prune origin

3. 恢复误删的分支

如果不小心删错了分支,可以通过提交哈希恢复:

# 查找分支最后的提交哈希
git reflog

# 根据哈希恢复分支
git branch <分支名> <提交哈希>

完整示例

# 查看当前分支状态
$ git branch -a
* main
  feature/login
  remotes/origin/main
  remotes/origin/feature/login

# 切换到主分支
$ git checkout main
Switched to branch 'main'

# 删除已合并的本地分支
$ git branch -d feature/login
Deleted branch feature/login (was a1b2c3d).

# 删除远程分支
$ git push origin --delete feature/login
To https://github.com/user/repo.git
 - [deleted]         feature/login

# 清理本地远程分支缓存
$ git fetch --prune

总结表格

操作 命令 说明
删除本地分支(安全) git branch -d <分支名> 只能删除已合并的分支
删除本地分支(强制) git branch -D <分支名> 强制删除未合并的分支
删除远程分支 git push origin --delete <分支名> 删除远程仓库的分支
查看所有分支 git branch -a 显示本地和远程分支
清理远程缓存 git fetch --prune 同步远程分支删除状态

⚠️ 重要提醒

  1. 不能删除当前所在分支:必须先切换到其他分支
  2. 删除远程分支需要权限:通常需要推送权限到远程仓库
  3. 删除前确认:特别是强制删除,数据可能无法恢复
  4. 团队协作:删除共享的远程分支前,确保团队成员都知道

最安全的工作流程:

git checkout main
git branch -d feature/done
git push origin --delete feature/done
git fetch --prune