Git 应用与规范指南
发布时间:2026/10/27 1:20:47 锦皓数字建站

Git 应用与规范指南一、Git 基础概念1. 核心概念2. 安装与配置二、Git 常用命令1. 基础操作命令2. 分支操作命令3. 高级操作命令三、Git 分支命名规范1. 常见分支类型2. 命名规范四、Git 分支管理策略1. Git Flow 工作流2. 其他常用工作流五、代码合并与冲突解决1. 代码合并方法2. 冲突解决步骤六、团队协作最佳实践1. 提交信息规范2. 日常工作流程3. 代码审查流程七、Git 高级功能1. Git Hooks2. 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.nameYour Namegitconfig--globaluser.emailyour.emailexample.com# 配置默认编辑器gitconfig--globalcore.editorcode --wait# 使用VS Code# 查看配置gitconfig--list二、Git 常用命令1. 基础操作命令# 初始化新仓库在当前目录初始化一个新的Git仓库gitinit# 克隆现有仓库gitclonerepository-url# 示例克隆一个GitHub仓库gitclone https://github.com/username/project.git# 查看文件状态检查当前工作区的文件状态gitstatus# 添加文件到暂存区gitaddfile# 添加单个文件gitadd.# 添加所有更改的文件# 示例添加单个文件gitaddindex.html# 示例添加所有修改的文件gitadd.# 提交更改gitcommit-m提交信息# 示例提交带有描述信息的更改gitcommit-mfeat: add login page# 查看提交历史gitlog# 查看完整的提交历史gitlog--oneline# 简洁格式查看提交历史# 推送更改到远程仓库gitpush originbranch-name# 示例将本地main分支推送到远程gitpush origin main# 拉取远程更改gitpull originbranch-name# 示例拉取远程develop分支的最新更改gitpull origin develop# 获取远程仓库信息 查看当前配置的远程仓库gitremote-v2. 分支操作命令# 查看所有分支gitbranch# 查看所有分支包括远程分支gitbranch-a# 创建新分支gitbranchbranch-name# 示例创建一个名为feature/login的新分支gitbranch feature/login# 切换分支gitcheckoutbranch-name# 示例切换到develop分支gitcheckout develop# 创建并切换到新分支gitcheckout-bbranch-name# 示例创建并切换到feature/profile分支gitcheckout-bfeature/profile# 切换分支推荐新语法Git 2.23gitswitchbranch-name# 示例切换到develop分支gitswitch develop# 创建并切换到新分支推荐新语法Git 2.23gitswitch-cbranch-name# 示例创建并切换到feature/profile分支gitswitch-cfeature/profile# 合并分支gitmergebranch-name# 将指定分支合并到当前分支# 示例将feature/login分支合并到当前分支gitmerge feature/login# 删除分支gitbranch-dbranch-name# 删除已合并的分支gitbranch-Dbranch-name# 强制删除未合并的分支# 示例删除已合并的feature/login分支gitbranch-dfeature/login# 示例强制删除未合并的experimental分支gitbranch-Dexperimental# 推送新分支到远程gitpush-uoriginbranch-name# 示例推送feature/dashboard分支到远程并设置上游跟踪gitpush-uorigin feature/dashboard3. 高级操作命令# 暂存当前更改gitstashgitstash list# 查看所有暂存gitstash apply# 应用最近的暂存gitstash drop# 删除最近的暂存gitstash pop# 应用并删除最近的暂存# 示例暂存当前未提交的更改gitstash# 示例查看所有暂存记录gitstash list# 示例应用最近的暂存但不删除gitstash apply# 示例应用最近的暂存并删除gitstash pop# 撤销工作区更改gitrestorefile# 推荐新语法Git 2.23gitcheckout --file# 旧语法与上行等价# 示例撤销对index.html文件的未提交更改gitrestore index.html# 撤销暂存区更改gitreset HEADfile# 示例从暂存区移除app.js文件但保留工作区更改gitreset HEAD app.js# 撤销暂存区更改取消暂存保留工作区更改gitrestore--stagedfile# 推荐新语法Git 2.23gitreset HEADfile# 旧语法与上行等价# 示例从暂存区移除app.js文件但保留工作区更改gitrestore--stagedapp.js# 回滚提交gitreset--softcommit-id# 软回滚只移动提交指针保留暂存区和工作区gitreset--mixedcommit-id# 混合回滚默认保留工作区更改取消暂存gitreset--hardcommit-id# 硬回滚丢弃所有之后的更改# 示例软回滚到上一个提交保留更改gitreset--softHEAD~1# 示例硬回滚到特定提交丢弃所有之后的更改gitreset--harda1b2c3d# cherry-pick选择性合并提交gitcherry-pickcommit-id# 示例将特定提交应用到当前分支gitcherry-pick a1b2c3d# 打标签gittagtag-name# 为当前提交创建标签gittag-atag-name-m标签信息gitpush origintag-name# 推送标签到远程# 示例创建轻量标签gittag v1.0.0# 示例创建带注释的标签gittag-av1.0.0-mVersion 1.0.0 release# 示例推送标签到远程gitpush origin v1.0.0三、Git 分支命名规范1. 常见分支类型分支类型命名格式示例说明主分支main/mastermain稳定可发布的代码保护分支禁止直接提交开发分支developdevelop日常开发主分支功能完成后合并到此功能分支feature/简短描述feature/user-login从develop创建完成后合并回developBug 修复分支bugfix/简短描述bugfix/fix-email-validation修复开发中的问题从develop创建发布分支release/版本号release/1.2.0准备发布版本从develop创建完成后合并到main和develop热修复分支hotfix/简短描述hotfix/critical-security-fix线上紧急修复从main创建完成后合并到main和develop2. 命名规范使用短横线-分隔单词如feature/user-authentication统一前缀如feature/、bugfix/方便分类和筛选保持简短且描述性强让人一看就知道用途避免特殊字符如#、$、和空格使用小写字母提高可读性关联issue号如有feature/issue-123-user-login四、Git 分支管理策略1. Git Flow 工作流Git Flow 是一种成熟的分支管理工作流适合中大型项目。从main创建修复完成合并回同时合并到从develop创建功能完成合并回准备发布创建发布完成合并到同时合并回main/masterhotfix/*developfeature/*release/*2. 其他常用工作流集中式工作流类似于SVN只有一个主分支适合小型团队功能分支工作流所有功能开发都在专门的功能分支上进行Forking工作流适用于开源项目开发者fork仓库后提交Pull Request五、代码合并与冲突解决1. 代码合并方法Merge合并保留分支历史创建新的合并提交# 基本合并命令gitmergebranch-name# 示例将feature/homepage分支合并到当前分支gitmerge feature/homepage# 示例合并时创建详细的合并提交信息gitmerge --no-ff feature/homepageRebase变基将当前分支的提交移到目标分支的最新提交之后使历史更线性gitcheckoutbranch-namegitrebase develop# 示例在feature/profile分支上执行变基操作gitcheckout feature/profilegitrebase develop# 示例解决变基过程中的冲突后继续变基gitadd.gitrebase--continue2. 冲突解决步骤识别冲突Git会标记冲突文件查看冲突打开冲突文件查找冲突标记,,解决冲突编辑文件保留正确内容删除冲突标记标记为已解决git add conflicted-file完成合并git commit# 示例解决冲突后完成合并# 1. 编辑冲突文件解决冲突# 2. 标记为已解决gitaddconflicted_file.c# 3. 完成合并gitcommit-mfix: resolve merge conflict HEAD // 当前分支的代码 // 合并分支的代码 branch-name六、团队协作最佳实践1. 提交信息规范统一的提交信息格式能降低团队沟通成本也便于脚本自动生成 ChangeLog。提交信息遵循以下格式type(scope): subjecttype必填更改类型只允许使用下表 7 个标识scope可选更改影响范围如auth、ui、api无明确范围时可省略直接写type: subjectsubject必填提交目的的一句话简短描述建议不超过 50 字结尾不加句号body可选更改原因与方案的详细说明与 subject 之间空一行footer可选备注或关联 Issue 关闭信息如Closes #123Type必选项用于描述本次 commit 更改类型只允许使用下列 7 个标识类型后使用英文冒号空格。序号类型说明1feat新功能2fix修补 bug3docs修改文档4style格式化代码结构没有逻辑上的代码修改5refactor重构即不是新增功能也不是修改 bug 的代码变动比如重命名变量6test增加测试代码、单元测试一类的没有生产代码的变更7chore构建过程或辅助工具的变动不会影响代码运行推荐同类型多个内容以逗号分隔不同类型的提交内容可通过;格式进行区分提交建议按照同一类型进行多次提交。示例单个类型提交feat: 新增登录、注册、账号查询功能,新增密码修改功能多个类型提交feat: 新增登录功能; fix: 修复登录异常bug提交示例# 单类型、单内容gitcommit-mdocs: 更新分支命名规范说明# 单类型、多内容逗号分隔gitcommit-mfeat: 新增登录、注册、账号查询功能,新增密码修改功能# 多类型分号分隔建议拆分为多次提交gitcommit-mfeat: 新增登录功能; fix: 修复登录异常bug# 带 scopegitcommit-mfix(auth): 修复token过期后未自动跳转登录页的问题其他提交原则保持提交粒度合理每个提交对应一个独立的更改避免大文件提交使用.gitignore文件排除临时文件、构建产物等自动化校验可用「七、Git 高级功能」中的commit-msg钩子拦截不合规的提交信息2. 日常工作流程每天开始工作前git pull origin develop拉取最新代码开发新功能时创建专门的功能分支定期同步代码将develop分支的更改合并到功能分支完成功能后提交Pull Request进行代码审查3. 代码审查流程使用Pull Request/Merge Request进行代码审查至少1-2名团队成员参与审查审查重点代码质量、功能实现、潜在问题审查通过后再合并到主分支七、Git 高级功能1. Git HooksGit 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: subjectexit1fi2. Git 子模块用于管理项目中的外部依赖。# 添加子模块gitsubmoduleaddrepository-urlpath# 示例添加一个UI组件库作为子模块gitsubmoduleaddhttps://github.com/username/ui-components.git src/components/external# 克隆包含子模块的仓库gitclonerepository-urlgitsubmodule update--init--recursive# 示例克隆包含子模块的仓库并初始化所有子模块gitclone https://github.com/username/main-project.gitgitsubmodule update--init--recursive# 更新子模块gitsubmodule update--remote# 示例更新所有子模块到最新版本gitsubmodule update--remote--recursive3. Git blame查看文件每行代码最后一次修改的提交和作者。gitblamefile# 示例查看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 HEAD2. 找回丢失的提交gitreflog# 查看所有引用历史gitcheckoutcommit-id# 检出丢失的提交gitbranch recover-branch# 创建新分支保留该提交# 示例查看所有操作历史以找到丢失的提交gitreflog# 示例恢复特定的丢失提交gitcheckout a1b2c3d# 示例创建新分支来保留找回的提交gitbranch recovered-feature a1b2c3d3. 清理未跟踪文件gitclean-n# 预览将要删除的文件gitclean-f# 删除未跟踪的文件gitclean-fd# 删除未跟踪的文件和目录gitclean-fx# 删除未跟踪的文件和被忽略的文件# 示例先预览将要清理的文件gitclean-n# 示例清理所有未跟踪的文件gitclean-f# 示例清理所有未跟踪的文件和目录gitclean-fd九、Git 工具推荐1. 命令行工具git-extras提供额外的Git命令如git summary、git effort等hubGitHub命令行工具简化GitHub操作git-flowGit Flow工作流辅助工具自动化分支管理流程2. GUI工具SourceTree免费的Git GUI客户端支持多种Git操作GitKraken直观的Git客户端支持多种Git托管服务GitHub DesktopGitHub官方客户端简化GitHub工作流VS Code Git集成轻量级Git操作界面集成在代码编辑器中希望本指南能帮助你更好地学习和应用Git进行版本控制和团队协作。Git是一个强大的工具掌握它将大大提高你的开发效率和代码管理能力。持续学习不断实践你会越来越熟练地使用Git本博客为个人技术记录与分享平台内容基于实践经验整理。如有错误或建议欢迎在评论区指正将及时核实并修正。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。