☰
Git 应用与规范指南
2026/10/27 1:20:41 网站建设 项目流程

Git 应用与规范指南

    • 一、Git 基础概念
      • 1. 核心概念
      • 2. 安装与配置
    • 二、Git 常用命令
      • 1. 基础操作命令
      • 2. 分支操作命令
      • 3. 高级操作命令
    • 三、Git 分支命名规范
      • 1. 常见分支类型
      • 2. 命名规范
    • 四、Git 分支管理策略
      • 1. Git Flow 工作流
      • 2. 其他常用工作流
    • 五、代码合并与冲突解决
      • 1. 代码合并方法
      • 2. 冲突解决步骤
    • 六、团队协作最佳实践
      • 1. 提交信息规范
      • 2. 日常工作流程
      • 3. 代码审查流程
    • 七、Git 高级功能
      • 1. Git Hooks
      • 2. Git 子模块
      • 3. Git blame
    • 八、Git 常见问题解决方案
      • 1. 撤销错误提交
      • 2. 找回丢失的提交
      • 3. 清理未跟踪文件
    • 九、Git 工具推荐
      • 1. 命令行工具
      • 2. GUI工具

一、Git 基础概念

Git 是一个分布式版本控制系统,用于跟踪代码变更、管理项目版本和支持团队协作。

1. 核心概念

  • 仓库(Repository):包含项目所有文件和历史记录的目录
  • 提交(Commit):记录文件的一组更改,包含作者、时间戳和提交信息
  • 分支(Branch):独立的代码开发线路,允许并行开发
  • 合并(Merge):将一个分支的更改整合到另一个分支
  • 远程仓库(Remote):托管在网络上的仓库副本
  • 工作区(Working Directory):本地正在编辑的文件
  • 暂存区(Staging Area):准备提交的文件更改集合
  • HEAD:指向当前检出分支的最新提交

2. 安装与配置

# 安装完成后配置用户信息gitconfig--globaluser.name"Your Name"gitconfig--globaluser.email"your.email@example.com"# 配置默认编辑器gitconfig--globalcore.editor"code --wait"# 使用VS Code# 查看配置gitconfig--list

二、Git 常用命令

1. 基础操作命令

# 初始化新仓库(在当前目录初始化一个新的Git仓库)gitinit# 克隆现有仓库gitclone<repository-url># 示例:克隆一个GitHub仓库gitclone https://github.com/username/project.git# 查看文件状态(检查当前工作区的文件状态)gitstatus# 添加文件到暂存区gitadd<file># 添加单个文件gitadd.# 添加所有更改的文件# 示例:添加单个文件gitaddindex.html# 示例:添加所有修改的文件gitadd.# 提交更改gitcommit-m"提交信息"# 示例:提交带有描述信息的更改gitcommit-m"feat: add login page"# 查看提交历史gitlog# 查看完整的提交历史gitlog--oneline# 简洁格式查看提交历史# 推送更改到远程仓库gitpush origin<branch-name># 示例:将本地main分支推送到远程gitpush origin main# 拉取远程更改gitpull origin<branch-name># 示例:拉取远程develop分支的最新更改gitpull origin develop# 获取远程仓库信息 (查看当前配置的远程仓库)gitremote-v

2. 分支操作命令

# 查看所有分支gitbranch# 查看所有分支(包括远程分支)gitbranch-a# 创建新分支gitbranch<branch-name># 示例:创建一个名为feature/login的新分支gitbranch feature/login# 切换分支gitcheckout<branch-name># 示例:切换到develop分支gitcheckout develop# 创建并切换到新分支gitcheckout-b<branch-name># 示例:创建并切换到feature/profile分支gitcheckout-bfeature/profile# 切换分支(推荐新语法,Git 2.23+)gitswitch<branch-name># 示例:切换到develop分支gitswitch develop# 创建并切换到新分支(推荐新语法,Git 2.23+)gitswitch-c<branch-name># 示例:创建并切换到feature/profile分支gitswitch-cfeature/profile# 合并分支gitmerge<branch-name># 将指定分支合并到当前分支# 示例:将feature/login分支合并到当前分支gitmerge feature/login# 删除分支gitbranch-d<branch-name># 删除已合并的分支gitbranch-D<branch-name># 强制删除未合并的分支# 示例:删除已合并的feature/login分支gitbranch-dfeature/login# 示例:强制删除未合并的experimental分支gitbranch-Dexperimental# 推送新分支到远程gitpush-uorigin<branch-name># 示例:推送feature/dashboard分支到远程并设置上游跟踪gitpush-uorigin feature/dashboard

3. 高级操作命令

# 暂存当前更改gitstashgitstash list# 查看所有暂存gitstash apply# 应用最近的暂存gitstash drop# 删除最近的暂存gitstash pop# 应用并删除最近的暂存# 示例:暂存当前未提交的更改gitstash# 示例:查看所有暂存记录gitstash list# 示例:应用最近的暂存但不删除gitstash apply# 示例:应用最近的暂存并删除gitstash pop# 撤销工作区更改gitrestore<file># 推荐新语法(Git 2.23+)gitcheckout --<file># 旧语法,与上行等价# 示例:撤销对index.html文件的未提交更改gitrestore index.html# 撤销暂存区更改gitreset HEAD<file># 示例:从暂存区移除app.js文件,但保留工作区更改gitreset HEAD app.js# 撤销暂存区更改(取消暂存,保留工作区更改)gitrestore--staged<file># 推荐新语法(Git 2.23+)gitreset HEAD<file># 旧语法,与上行等价# 示例:从暂存区移除app.js文件,但保留工作区更改gitrestore--stagedapp.js# 回滚提交gitreset--soft<commit-id># 软回滚:只移动提交指针,保留暂存区和工作区gitreset--mixed<commit-id># 混合回滚(默认):保留工作区更改,取消暂存gitreset--hard<commit-id># 硬回滚:丢弃所有之后的更改# 示例:软回滚到上一个提交(保留更改)gitreset--softHEAD~1# 示例:硬回滚到特定提交(丢弃所有之后的更改)gitreset--harda1b2c3d# cherry-pick(选择性合并提交)gitcherry-pick<commit-id># 示例:将特定提交应用到当前分支gitcherry-pick a1b2c3d# 打标签gittag<tag-name># 为当前提交创建标签gittag-a<tag-name>-m"标签信息"gitpush origin<tag-name># 推送标签到远程# 示例:创建轻量标签gittag v1.0.0# 示例:创建带注释的标签gittag-av1.0.0-m"Version 1.0.0 release"# 示例:推送标签到远程gitpush origin v1.0.0

三、Git 分支命名规范

1. 常见分支类型

分支类型命名格式示例说明
主分支main/mastermain稳定可发布的代码,保护分支,禁止直接提交
开发分支developdevelop日常开发主分支,功能完成后合并到此
功能分支feature/简短描述feature/user-login从develop创建,完成后合并回develop
Bug 修复分支bugfix/简短描述bugfix/fix-email-validation修复开发中的问题,从develop创建
发布分支release/版本号release/1.2.0准备发布版本,从develop创建,完成后合并到main和develop
热修复分支hotfix/简短描述hotfix/critical-security-fix线上紧急修复,从main创建,完成后合并到main和develop

2. 命名规范

  • 使用短横线-分隔单词(如feature/user-authentication)
  • 统一前缀(如feature/、bugfix/)方便分类和筛选
  • 保持简短且描述性强,让人一看就知道用途
  • 避免特殊字符(如#、$、@)和空格
  • 使用小写字母,提高可读性
  • 关联issue号(如有):feature/issue-123-user-login

四、Git 分支管理策略

1. Git Flow 工作流

Git Flow 是一种成熟的分支管理工作流,适合中大型项目。

从main创建

修复完成合并回

同时合并到

从develop创建

功能完成合并回

准备发布创建

发布完成合并到

同时合并回

main/master

hotfix/*

develop

feature/*

release/*

2. 其他常用工作流

  • 集中式工作流:类似于SVN,只有一个主分支,适合小型团队
  • 功能分支工作流:所有功能开发都在专门的功能分支上进行
  • Forking工作流:适用于开源项目,开发者fork仓库后提交Pull Request

五、代码合并与冲突解决

1. 代码合并方法

  • Merge合并:保留分支历史,创建新的合并提交
    # 基本合并命令gitmerge<branch-name># 示例:将feature/homepage分支合并到当前分支gitmerge feature/homepage# 示例:合并时创建详细的合并提交信息gitmerge --no-ff feature/homepage
  • Rebase变基:将当前分支的提交移到目标分支的最新提交之后,使历史更线性
    gitcheckout<branch-name>gitrebase develop# 示例:在feature/profile分支上执行变基操作gitcheckout feature/profilegitrebase develop# 示例:解决变基过程中的冲突后继续变基gitadd.gitrebase--continue

2. 冲突解决步骤

  1. 识别冲突:Git会标记冲突文件
  2. 查看冲突:打开冲突文件,查找冲突标记<<<<<<<,=======,>>>>>>>
  3. 解决冲突:编辑文件,保留正确内容,删除冲突标记
  4. 标记为已解决:git add <conflicted-file>
  5. 完成合并:git commit
# 示例:解决冲突后完成合并# 1. 编辑冲突文件,解决冲突# 2. 标记为已解决gitaddconflicted_file.c# 3. 完成合并gitcommit-m"fix: resolve merge conflict"
<<<<<<< HEAD // 当前分支的代码 ======= // 合并分支的代码 >>>>>>> branch-name

六、团队协作最佳实践

1. 提交信息规范

统一的提交信息格式能降低团队沟通成本,也便于脚本自动生成 ChangeLog。提交信息遵循以下格式:

type(scope): subject
  • type(必填):更改类型,只允许使用下表 7 个标识
  • scope(可选):更改影响范围,如auth、ui、api;无明确范围时可省略,直接写type: subject
  • subject(必填):提交目的的一句话简短描述,建议不超过 50 字,结尾不加句号
  • body(可选):更改原因与方案的详细说明,与 subject 之间空一行
  • footer(可选):备注或关联 Issue 关闭信息,如Closes #123

Type:必选项,用于描述本次 commit 更改类型,只允许使用下列 7 个标识,类型后使用英文冒号+空格。

序号类型说明
1feat新功能
2fix修补 bug
3docs修改文档
4style格式化代码结构,没有逻辑上的代码修改
5refactor重构,即不是新增功能,也不是修改 bug 的代码变动,比如重命名变量
6test增加测试代码、单元测试一类的,没有生产代码的变更
7chore构建过程或辅助工具的变动(不会影响代码运行)

推荐:同类型多个内容以逗号分隔,不同类型的提交内容可通过;格式进行区分提交(建议按照同一类型进行多次提交)。

示例:

  • 单个类型提交:feat: 新增登录、注册、账号查询功能,新增密码修改功能
  • 多个类型提交:feat: 新增登录功能; fix: 修复登录异常bug

提交示例:

# 单类型、单内容gitcommit-m"docs: 更新分支命名规范说明"# 单类型、多内容(逗号分隔)gitcommit-m"feat: 新增登录、注册、账号查询功能,新增密码修改功能"# 多类型(分号分隔,建议拆分为多次提交)gitcommit-m"feat: 新增登录功能; fix: 修复登录异常bug"# 带 scopegitcommit-m"fix(auth): 修复token过期后未自动跳转登录页的问题"

其他提交原则:

  • 保持提交粒度合理:每个提交对应一个独立的更改
  • 避免大文件提交:使用.gitignore文件排除临时文件、构建产物等
  • 自动化校验:可用「七、Git 高级功能」中的commit-msg钩子拦截不合规的提交信息

2. 日常工作流程

  • 每天开始工作前:git pull origin develop拉取最新代码
  • 开发新功能时:创建专门的功能分支
  • 定期同步代码:将develop分支的更改合并到功能分支
  • 完成功能后:提交Pull Request进行代码审查

3. 代码审查流程

  • 使用Pull Request/Merge Request进行代码审查
  • 至少1-2名团队成员参与审查
  • 审查重点:代码质量、功能实现、潜在问题
  • 审查通过后再合并到主分支

七、Git 高级功能

1. Git Hooks

Git Hooks 允许在特定Git事件发生时自动执行脚本。

常用钩子:

  • pre-commit:提交前运行(可用于代码格式化、语法检查等)
  • commit-msg:检查提交信息格式
  • post-commit:提交后运行
  • pre-push:推送前运行

示例.git/hooks/pre-commit脚本:

#!/bin/sh# 运行代码格式化exportPATH=$PATH:/usr/local/bin npx prettier--write.# 添加格式化后的文件gitadd.

示例.git/hooks/commit-msg脚本:

#!/bin/sh# 检查提交信息是否符合规范COMMIT_MSG_FILE=$1PATTERN="^(feat|fix|docs|style|refactor|test|chore)(\([^)]+\))?: .{1,50}"if!grep-qE"$PATTERN""$COMMIT_MSG_FILE";thenecho"提交信息不符合规范,请使用: type(scope): subject 或 type: subject"exit1fi

2. Git 子模块

用于管理项目中的外部依赖。

# 添加子模块gitsubmoduleadd<repository-url><path># 示例:添加一个UI组件库作为子模块gitsubmoduleaddhttps://github.com/username/ui-components.git src/components/external# 克隆包含子模块的仓库gitclone<repository-url>gitsubmodule update--init--recursive# 示例:克隆包含子模块的仓库并初始化所有子模块gitclone https://github.com/username/main-project.gitgitsubmodule update--init--recursive# 更新子模块gitsubmodule update--remote# 示例:更新所有子模块到最新版本gitsubmodule update--remote--recursive

3. Git blame

查看文件每行代码最后一次修改的提交和作者。

gitblame<file># 示例:查看index.js文件每行代码的修改记录gitblame index.js# 示例:只查看index.js文件第10-20行的修改记录gitblame-L10,20index.js

八、Git 常见问题解决方案

1. 撤销错误提交

# 撤销最近的提交,但保留更改gitreset--softHEAD~1# 示例:撤销最近一次提交,但保留更改以便修改gitreset--softHEAD~1# 完全撤销最近的提交,丢弃更改gitreset--hardHEAD~1# 示例:彻底撤销最近一次提交,丢弃所有更改gitreset--hardHEAD~1# 撤销已推送到远程的提交(谨慎使用)gitrevert HEAD# 示例:创建一个新提交来撤销上一次提交的更改gitrevert HEAD

2. 找回丢失的提交

gitreflog# 查看所有引用历史gitcheckout<commit-id># 检出丢失的提交gitbranch recover-branch# 创建新分支保留该提交# 示例:查看所有操作历史以找到丢失的提交gitreflog# 示例:恢复特定的丢失提交gitcheckout a1b2c3d# 示例:创建新分支来保留找回的提交gitbranch recovered-feature a1b2c3d

3. 清理未跟踪文件

gitclean-n# 预览将要删除的文件gitclean-f# 删除未跟踪的文件gitclean-fd# 删除未跟踪的文件和目录gitclean-fx# 删除未跟踪的文件和被忽略的文件# 示例:先预览将要清理的文件gitclean-n# 示例:清理所有未跟踪的文件gitclean-f# 示例:清理所有未跟踪的文件和目录gitclean-fd

九、Git 工具推荐

1. 命令行工具

  • git-extras:提供额外的Git命令,如git summary、git effort等
  • hub:GitHub命令行工具,简化GitHub操作
  • git-flow:Git Flow工作流辅助工具,自动化分支管理流程

2. GUI工具

  • SourceTree:免费的Git GUI客户端,支持多种Git操作
  • GitKraken:直观的Git客户端,支持多种Git托管服务
  • GitHub Desktop:GitHub官方客户端,简化GitHub工作流
  • VS Code Git集成:轻量级Git操作界面,集成在代码编辑器中

希望本指南能帮助你更好地学习和应用Git进行版本控制和团队协作。Git是一个强大的工具,掌握它将大大提高你的开发效率和代码管理能力。

持续学习,不断实践,你会越来越熟练地使用Git!

本博客为个人技术记录与分享平台,内容基于实践经验整理。如有错误或建议,欢迎在评论区指正,将及时核实并修正。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询