FORMA

Git 分支、远程协作与标签管理

分支、远程仓库与标签是 Git 团队协作中最核心的三个能力:分支让你在独立的线上开发而不影响主干,远程仓库是团队协作的桥梁,标签用于标记重要的发布版本。本文依次介绍。

一、分支管理

分支是 Git 的核心功能,它允许你在独立的线上开发新功能、修复 Bug,而不会影响主分支(如 main)。

1. 查看分支

bash
git branch          # 本地分支列表,当前分支前会显示 * 号
git branch -r       # 仅显示远程分支
git branch -a       # 显示所有分支(本地 + 远程)

2. 创建与切换分支

bash
git branch feature-xxx   # 创建新分支(停留在当前分支)
git checkout feature-xxx # 切换到该分支
# 创建并切换到新分支(常用)
git checkout -b feature-xxx

# Git 2.23+ 推荐使用 switch 命令(语义更清晰)
git switch feature-xxx          # 切换分支
git switch -c feature-xxx       # 创建并切换

3. 合并分支

将另一个分支的修改合并到当前分支。

bash
# 首先切换到目标分支(例如 main)
git checkout main
# 将 feature-xxx 分支合并进来
git merge feature-xxx

合并类型

类型说明
快进合并(Fast-forward)当目标分支没有新提交时,直接移动指针,不会产生额外的合并提交。
三方合并当两个分支都有新提交时,Git 会自动创建一个新的合并提交(merge commit)。

冲突处理:如果两个分支都修改了同一文件的同一区域,Git 会暂停合并并标记冲突。需要手动编辑冲突文件,然后 git add + git commit 完成合并(详细步骤见 查看历史与撤销)。

4. 删除分支

bash
git branch -d feature-xxx   # 删除已合并到当前分支的分支
git branch -D feature-xxx   # 强制删除未合并的分支(丢失未合并的提交)
  • -d(safe)会检查该分支是否已合并,若未合并则拒绝删除。
  • -D(force)会直接删除,即使有未合并的提交也会丢失,请谨慎使用。

5. 快速示例

bash
# 查看当前分支
git branch
* main

# 创建并切换到新分支
git checkout -b feature-login

# 在 feature-login 上开发,提交后切换回 main
git commit -m "add login"
git checkout main

# 合并 feature-login 到 main
git merge feature-login

# 删除已合并的分支
git branch -d feature-login

二、远程仓库协作

远程仓库是团队协作的桥梁。下面介绍管理远程仓库、推送更新、拉取更新以及克隆后同步的常用命令。

1. 管理远程仓库

bash
git remote -v                     # 查看当前所有远程仓库的别名和地址
git remote add origin <url>       # 添加远程仓库(origin 是默认别名)
git remote remove origin          # 移除名为 origin 的远程仓库
git remote set-url origin <new-url>  # 修改远程地址
  • origin 是克隆远程仓库后自动生成的默认名称,你也可以使用其他名称(如 upstream)。

2. 推送到远程(git push

bash
git push origin main              # 将本地 main 分支推送到远程 origin/main
git push -u origin main           # 推送并设置上游(以后直接 git push 即可)
git push --all origin             # 推送所有本地分支到远程
git push origin --delete feature  # 删除远程的 feature 分支
  • -u(或 --set-upstream)建立本地分支与远程分支的关联,后续可省略分支参数。
  • 首次推送新分支时建议使用 -u

3. 拉取远程更新

bash
git fetch origin                  # 获取远程仓库的最新提交(但不合并到本地分支)
git pull origin main              # 拉取远程 main 分支并合并到当前分支(fetch + merge)
git pull --rebase origin main     # 拉取并使用 rebase 保持线性历史(避免多余的合并提交)
  • fetch 只是将远程更新下载到本地仓库的远程跟踪分支(如 origin/main),不会自动修改你的工作区。
  • pull 会自动合并(或变基),可能产生冲突需要解决。

4. 克隆后同步

bash
git clone <url>                   # 克隆远程仓库到本地(自动创建 origin 和主分支跟踪)
# 进入仓库目录后,直接使用
git pull                          # 若当前分支已设置上游,则拉取并合并
  • 克隆后,本地 main 分支默认跟踪远程 origin/main,因此直接 git pull 即可获取远程最新代码。仓库创建/克隆的详细说明见 Git 安装与配置

5. 常见协作流程示例

bash
# 1. 克隆仓库
git clone https://github.com/user/repo.git
cd repo

# 2. 查看远程
git remote -v

# 3. 创建新分支并推送
git checkout -b feature-xxx
git push -u origin feature-xxx

# 4. 其他人拉取更新
git pull origin main

# 5. 删除远程分支
git push origin --delete feature-xxx

三、标签管理

标签(Tag)用于为仓库中的某个特定提交打上标记,常用于标识发布版本(如 v1.0.0)。Git 支持两种标签:轻量标签(lightweight)和附注标签(annotated)。

1. 创建标签

轻量标签(Lightweight Tag)

相当于一个不会移动的分支指针,只包含提交的引用,不包含额外信息。

bash
git tag v1.0.0

附注标签(Annotated Tag,推荐)

存储在 Git 对象库中,包含打标签者的名字、邮箱、日期和标签说明。建议用于正式发布。

bash
git tag -a v1.0.0 -m "release version 1.0.0"
  • -a 表示创建附注标签,-m 指定标签说明(若不写会弹出编辑器)。

2. 查看标签

bash
git tag                # 列出所有标签(按字母顺序)
git tag -l "v1.*"      # 匹配通配符,如列出所有 v1.x 版本的标签
git show v1.0.0        # 显示标签信息和对应的提交

3. 推送标签到远程

默认情况下,git push 不会推送标签,需要显式推送。

bash
git push origin v1.0.0      # 推送单个标签
git push origin --tags       # 推送所有本地标签
  • 推送后,其他人可以通过 git pull 获取标签。

4. 删除标签

bash
# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0
# 或使用旧语法
git push origin :refs/tags/v1.0.0
  • 删除远程标签后,其他人需要手动删除本地的同名标签(git tag -d v1.0.0)并重新拉取。

5. 标签的用途

  • 版本发布:标记软件版本号(如 v2.1.0)。
  • 历史锚点:记录重要的提交(如上线前最后一次提交)。
  • 回滚依据:通过标签可以快速切换到某个版本,例如 git checkout v1.0.0

四、注意事项

  • -D 强制删除分支、git push --force / --force-with-lease 强制推送都会改写或丢弃历史,仅在明确知道后果的情况下使用,公共分支尽量避免。
  • 首次推送新分支或首次克隆后,务必确认上游跟踪关系是否正确(git branch -vv 可查看)。
  • 附注标签包含完整的元数据,推荐用于发布版;轻量标签适用于临时标记。标签一旦推送到远程,应避免修改或删除,以免影响协作。
  • 删除远程分支/标签是破坏性操作,删除前确认该分支/标签确实不再被其他协作者依赖。

五、总结

能力关键命令
分支git branch / git checkout -b / git switch -c / git merge / git branch -d
远程git remote add / git push -u / git fetch / git pull
标签git tag -a / git push origin --tags / git tag -d

掌握以上内容,即可独立完成分支开发、远程协作与版本发布标记。

参考文献

资料说明
Pro Git官方书
Git 文档命令
运维导读学习路径