[git版本控制]git branch(详解)

30 阅读5分钟

我来为您详细介绍一下 git branch 命令。它是 Git 版本控制中最核心、最常用的命令之一,用于管理分支

核心概念:什么是分支?

在深入命令之前,理解“分支”的概念至关重要。

  • 分支就像一条独立的时间线工作线
  • 默认情况下,每个 Git 仓库都有一个主时间线,叫做 mastermain 分支。
  • 你可以从任意时间点, 基于主分支来创建新的分支,在新分支上进行开发、实验或修复Bug,而不会影响到主分支。
  • 分支之间可以自由切换、合并,这使得并行开发和版本管理变得非常灵活。

git branch 命令就是用来创建、列出、重命名和删除这些分支的工具。


命令详解及常用选项

1. 列出分支

这是最常用的功能,用于查看当前仓库的所有分支(只显示本地分支)。

git branch
  • 输出列表中,当前所在的分支前会有一个星号 *
  • 只显示本地分支。

查看更多信息

git branch -v
# 或
git branch --verbose
  • 显示每个分支最后一次提交的提交哈希和提交信息。

查看所有分支(包括远程跟踪分支)

git branch -a
# 或
git branch --all
  • 本地分支会正常显示。
  • 远程跟踪分支(如 origin/main)会以红色或特定颜色显示,通常前缀为 remotes/

只查看远程的分支

git branch -r
# 或
git branch --remote

查看已合并/未合并到当前分支的分支

git branch --merged    # 查看已合并到当前分支的分支
git branch --no-merged # 查看未合并到当前分支的分支
  • 这对于清理已完成功能的分支非常有用。
2. 创建分支

创建一个新的分支,但不会自动切换到该分支。

git branch <branch-name>
  • 示例git branch feature-login
  • 新分支会从你当前所在分支的最新提交(HEAD) 创建出来。
  • 创建后,你仍然在当前分支, 并不会切换到新的分支"feature-login"

从特定提交创建分支

git branch <branch-name> <commit-hash>
  • 示例git branch hotfix abc1234
  • 这在需要基于某个历史版本进行修复时非常有用。
3. 删除分支

当一个分支的工作已经完成并合并后,通常可以删除它。

安全删除(如果分支已合并)

git branch -d <branch-name>
# 或
git branch --delete <branch-name>
  • 如果该分支的改动已经合并到其他分支,Git 会允许删除。
  • 如果分支未合并,Git 会阻止删除,以防止数据丢失。

强制删除(无论是否合并)

git branch -D <branch-name>
  • 谨慎使用! 这会直接删除分支及其所有未合并的提交。

删除远程跟踪分支(在本地清理)

git branch -d -r origin/<branch-name> # 删除本地的远程跟踪引用
  • 这并不会真正删除远程仓库的分支。要删除远程分支,需要使用:
    git push origin --delete <branch-name>
    
4. 重命名分支
git branch -m <old-name> <new-name> # 重命名指定分支
git branch -m <new-name>            # 重命名当前分支
  • 示例git branch -m fix-typo feature-awesome
5. 设置跟踪关系

这是高级但重要的功能,将本地分支与远程分支关联起来。

git branch -u origin/<remote-branch-name>
# 或
git branch --set-upstream-to=origin/<remote-branch-name>
  • 设置后,在该分支上使用 git pushgit pull 时,如果不指定参数,Git 就知道该推送到或从哪里拉取代码。
  • 通常,在创建分支时使用 git checkout -b <branch> origin/<branch>git switch -c <branch> origin/<branch> 会更方便地建立跟踪。

与其他关键命令的协作

git branch 通常不单独使用,而是与以下命令紧密配合:

  1. git checkout <branch-name>git switch <branch-name>

    • git branch 创建分支,git checkout/switch 切换分支。
    • 组合技(创建并切换)
      git checkout -b <new-branch-name>
      # 或(更语义化)
      git switch -c <new-branch-name>
      
  2. git merge <branch-name>

    • 将指定分支的修改合并到当前分支
    • 完成功能开发后,你会切回 main 分支,然后执行 git merge feature-xxx
  3. git push

    • 将本地分支推送到远程仓库,与团队共享。
    • 首次推送新分支git push -u origin <branch-name>-u 参数会同时设置跟踪关系)。

典型工作流示例

假设你要开发一个新功能:

# 1. 确保在主分支,并获取最新代码
git checkout main       # 在本地切换到主分支main
git pull origin main    # 获取最新的代码

# 2. 创建并切换到功能分支
git checkout -b feature-user-profile  # 创建一个新分支, 用于本次的修改和迭代

# 3. 进行开发,多次提交...
git add .
git commit -m "完成用户头像上传功能"

# 4. 将分支推送到远程(首次)-u的作用是建立上游关系, upstream
git push -u origin feature-user-profile

# 5. 功能完成后,在主分支上进行合并
git checkout main
git pull origin main # 再次确保最新的代码
git merge feature-user-profile  #  把新分支的开发, 合并到main分支上来.
git push origin main     # 推到远程的仓库

# 6. (可选)删除本地和远程的功能分支
git branch -d feature-user-profile
git push origin --delete feature-user-profile

总结:git branch 常用命令速查表

命令作用
git branch列出本地分支
git branch -a列出所有分支(本地+远程)
git branch <name>创建新分支(不切换)
git branch -d <name>安全删除分支(已合并)
git branch -D <name>强制删除分支(未合并)
git branch -m <new-name>重命名当前分支
git branch --merged查看已合并分支
git checkout -b <name>创建并切换到新分支(经典)
git switch -c <name>创建并切换到新分支(推荐)

理解并熟练使用 git branch 是掌握 Git 工作流的基础,它让你能安全、高效地在不同任务间并行工作。