1. 概述

Git 作为现代软件开发中广泛使用的版本控制系统,分支管理是日常开发中不可或缺的一部分。

在本教程中,我们将通过实际操作,学习如何在本地和远程删除 Git 分支。

2. Git 仓库准备

为了更好地演示删除分支的操作,我们先准备一个 Git 仓库示例。

首先,我们从 GitHub 克隆一个测试仓库 myRepo(地址为 https://github.com/sk1418/myRepo):

$ git clone [email protected]:sk1418/myRepo.git
Cloning into 'myRepo'...
...
remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done

进入本地 myRepo 目录并查看当前分支:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

可以看到,当前仓库只有一个 master 分支,且它是默认分支。

接下来,我们将创建一些分支并演示如何删除本地和远程分支。本教程主要使用命令行操作。

3. 删除本地分支

我们先来看如何删除本地分支。

Git 的 git branch 命令提供了两个删除本地分支的选项:-d-D

它们的区别在于:

  • git branch -d <branchName>:安全删除,仅当分支已被合并时才允许删除
  • git branch -D <branchName>:强制删除,无论分支是否被合并

3.1 使用 -d 删除本地分支

我们先创建一个名为 feature 的新分支:

$ git checkout -b feature
Switched to a new branch 'feature'

尝试使用 -d 删除该分支:

$ git branch -d feature
error: Cannot delete branch 'feature' checked out at '/tmp/test/myRepo'

错误提示我们当前正处于 feature 分支上,无法删除。切换回 master 分支后再试:

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ git branch -d feature
Deleted branch feature (was 3aac499)

成功删除了本地 feature 分支。

3.2 使用 -D 删除本地分支

再次创建 feature 分支,并提交一些更改:

$ git checkout -b feature
Switched to a new branch 'feature'

# 修改 README.md 文件
$ echo "new feature" >> README.md
$ git ci -am'add "feature" to the readme'
[feature 4a87db9] add "feature" to the readme
 1 file changed, 1 insertion(+)

切换回 master 并尝试用 -d 删除:

$ git checkout master
Switched to branch 'master'

$ git branch -d feature
error: The branch 'feature' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature'.

提示该分支未被合并。此时可以使用 -D 强制删除:

$ git branch -D feature
Deleted branch feature (was 4a87db9)

✅ 小结:

  • 如果分支未合并,-d 会阻止删除
  • 使用 -D 可以强制删除未合并的分支

3.3 git branch -d/-D 不会删除远程分支

即使我们删除了本地 feature 分支,远程分支仍然存在。我们来验证一下。

再次创建 feature 分支,提交并推送到远程:

$ git checkout -b feature
Switched to a new branch 'feature'

# 添加新文件
$ echo "a wonderful new file" > wonderful.txt

$ git add . && git ci -am'add wonderful.txt'
[feature 2dd012d] add wonderful.txt
 1 file changed, 1 insertion(+)
 create mode 100644 wonderful.txt

$ git push
...
To github.com:sk1418/myRepo.git
 * [new branch]      feature -> feature

使用 -D 删除本地分支后查看远程分支状态:

$ git checkout master
Switched to branch 'master'

$ git branch -D feature
Deleted branch feature (was 2dd012d)

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature
  remotes/origin/master

可以看到远程 feature 分支仍然存在。

⚠️ 注意:删除本地分支不会影响远程分支。

4. 删除远程分支

要删除远程分支,可以使用以下命令:

git push origin -d <branchName>

这是 Git 1.7.0 以后推荐的方式,更直观易懂。

我们来删除远程 feature 分支:

$ git push origin -d feature
To github.com:sk1418/myRepo.git
 - [deleted]         feature

再查看远程分支列表:

$ git branch -a
* feature
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

✅ 小结:

  • 删除远程分支使用 git push origin -d <branchName>
  • 删除远程分支不会影响本地跟踪分支
  • 无论当前处于哪个本地分支,都可以删除远程分支

5. 总结

我们通过实践掌握了 Git 删除本地和远程分支的方法:

操作 命令 说明
删除本地分支 git branch -d <branchName> 安全删除,仅当分支已合并时可用
强制删除本地分支 git branch -D <branchName> 无论是否合并都删除
删除远程分支 git push origin -d <branchName> 推荐方式(Git 1.7.0+)
旧版删除远程分支 git push origin :<branchName> 适用于旧版本 Git

⚠️ 踩坑提醒:

  • 不要随意使用 -D,避免误删未合并的重要分支
  • 删除本地分支 ≠ 删除远程分支,反之亦然

Git 分支操作虽然简单,但一旦误操作可能导致代码丢失,务必谨慎操作。


原始标题:Delete a Git Branch Locally and Remotely