跳转到内容

分支管理

随着项目的推进,你的仓库中可能会积累大量的分支。学会有效地管理这些分支——查看状态、清理旧分支以及重命名——是保持项目整洁的关键技能。

最基础的命令是 git branch,它用于列出、创建或删除分支。

不带任何参数运行时,它会列出所有本地分支,并用星号 (*) 标记当前所在的分支。

Terminal window
git branch

输出示例:

Terminal window
feature-login
* main
bugfix-header

如果你的项目关联了远程仓库(如 GitHub、GitLab),你需要查看远程分支的状态。

  • 查看远程分支:使用 -r (remote) 选项。
    Terminal window
    git branch -r
  • 查看所有分支:使用 -a (all) 选项,同时列出本地和远程分支。
    Terminal window
    git branch -a

如果想知道每个分支最后一次提交的信息,可以使用 -v (verbose) 选项。

Terminal window
git branch -v

输出示例:

Terminal window
feature-login 1a2b3c4 Add login form validation
* main 9f8e7d6 Merge pull request #42
bugfix-header 5b6n7m8 Fix css alignment issue

在清理分支之前,通常需要确认哪些分支已经完成了使命(已合并),哪些还在开发中(未合并)。

列出所有已经合并到当前分支的分支。这些分支通常可以安全删除。

Terminal window
git branch --merged

列出尚未合并到当前分支的分支。

Terminal window
git branch --no-merged

当一个功能开发完成并合并到主分支后,或者你决定放弃某个实验性功能时,应该删除对应的分支以保持仓库整洁。

使用 -d (delete) 选项可以安全地删除分支。Git 会检查该分支是否已 fully merged(完全合并)到 HEAD 或其 upstream 分支。如果是,则允许删除;否则,Git 会拒绝删除并报错,需要使用 -D 强制删除。

Terminal window
git branch -d feature-login

如果分支未合并,你会看到类似这样的错误:

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

如果你确定要丢弃某个分支的所有改动(例如一个失败的实验),可以使用 -D 选项强制删除。这等同于 --delete --force

Terminal window
git branch -D experiment-fail

有时候你会发现分支名字起得不够准确,或者有拼写错误,这时可以使用 -m (move/rename) 选项。

如果你已经检出(checkout)到了该分支:

Terminal window
git branch -m new-branch-name

如果你在其他分支上,想要重命名另一个分支:

Terminal window
git branch -m old-name new-name