实践文章:Git 的正确使用姿势与最佳实践 | 青训营

57 阅读3分钟

序言

Git是一个开源的分布式版本控制系统,用于在多人协作的软件开发中跟踪和管理代码的变更。Git的主要功能有:

  • 分布式版本控制 - Git是一个分布式的版本控制系统,允许多个开发者在不同系统上管理和编辑同一个代码库。
  • 快照流机制 - Git通过快照流机制保存不同版本的代码。每次提交代码时,Git会捕获那个时刻的全部文件快照。
  • 支持离线操作 - 即使脱机,开发者也可以在本地提交更改,等重新连接后再和服务器同步。
  • 分支管理 - Git可以创建多条开发分支,合并分支非常快速和简单。
  • 完整性保证 - Git会计算存储内容的校验和,可保证代码未被非法篡改。
  • 多种协作流程 - Git支持多种代码协作流程,如集中式、功能分支等。

Git的常见指令包括:

基础

  • git help <command>
  • git init: 创建一个新的 git 仓库,其数据会存放在一个名为 .git 的目录下
  • git status: 显示当前的仓库状态
  • git add <filename>: 添加文件到暂存区
  • git commit: 创建一个新的提交
  • git log
  • git log --all --graph --decorate: 可视化历史记录(有向无环图)
  • git diff <filename>: 显示与暂存区文件的差异
  • git diff <revision> <filename>: 显示某个文件两个版本之间的差异
  • git checkout <revision>: 更新 HEAD 和目前的分支
  • git switch <branch>:可以切换到指定分支,并更新工作目录
    • -c :可以创建新分支并立即切换到该分支
    • -:切换到上一个分支
    • -d:删除指定分支

分支和合并

  • git branch: 显示分支
  • git branch <name>: 创建分支
  • git checkout -b <name>: 创建分支并切换到该分支
    • 相当于 git branch <name>; git checkout <name>
  • git merge <revision>: 合并到当前分支
  • git mergetool: 使用工具来处理合并冲突
  • git rebase: 将一系列补丁变基(rebase)为新的基线

远端操作

  • git remote: 列出远端
  • git remote add <name> <url>: 添加一个远端
  • git push <remote> <local branch>:<remote branch>: 将对象传送至远端并更新远端引用
  • git branch --set-upstream-to=<remote>/<remote branch>: 创建本地和远端分支的关联关系
  • git fetch: 从远端获取对象/索引
  • git pull: 相当于 git fetch; git merge
  • git clone: 从远端下载仓库

撤销

  • git commit --amend: 编辑提交的内容或信息
  • git reset HEAD <file>: 恢复暂存的文件
  • git checkout -- <file>: 丢弃修改
  • git restore: git2.32版本后取代git reset 进行许多撤销操作

Git流分支管理策略

  • master分支用于存储发布历史,始终保持与线上代码一致。
  • develop分支 是开发的主分支。
  • feature分支 用于开发新功能,从develop分支切出,开发完成后合并回develop。
  • release分支 用于发布前准备,从develop分支切出,发布结束后合并回develop和master。
  • hotfix分支 用于线上bug紧急修复,从master分支切出,修复后合并回master和develop。

具体流程如下:

  1. 从master分支切出develop分支,develop成为主开发分支
  2. 从develop分支切出feature分支,用于开发一个新功能
  3. 功能开发完成,合并feature分支回develop分支
  4. 当要发布一个新版本时,从develop分支切出release分支
  5. 在release分支最后测试和修复bug,然后合并回master和develop分支
  6. 线上bug修复需要从master切出hotfix分支进行修复
  7. 修复完成后合并hotfix分支回master和develop分支