Git 全面操作教程
1. 基础配置与初始化
1.1 环境配置
- 配置用户信息(提交代码必做,将关联你的提交记录):
git config --global user.name "Your Name"和git config --global user.email "your.email@example.com"(加global表示所有仓库生效,去掉则仅当前仓库生效) - 查看配置信息:
git config --list(可快速查看所有全局及本地配置,排查配置异常) - 设置默认编辑器(避免弹出系统自带编辑器,推荐VS Code):
git config --global core.editor "code --wait" - 多人协作关键配置(避免合并弹窗、提交历史混乱):
git config --global pull.rebase true(设置后,执行git pull会自动用rebase同步代码,不产生多余合并提交)
1.2 仓库初始化
- 创建新本地仓库:
git init(在当前目录生成.git隐藏文件夹,完成本地仓库初始化) - 克隆远程仓库(新人入职高频操作):
git clone [远程仓库URL](自动下载远程所有代码、分支,无需手动执行git init) - 查看仓库状态(日常高频):
git status(快速查看工作区、暂存区的文件变更,确认是否有未提交内容)
2. 日常操作流程
2.1 工作区与暂存区操作
- 将文件添加到暂存区(提交代码的必经步骤):
git add [文件名](单个文件提交)或git add .(添加当前目录所有变更文件,日常开发首选) - 提交暂存区文件(生成提交记录,便于后续回溯):
git commit -m "提交说明"(说明需规范,详见8.2,禁止写"改了点东西"等模糊表述) - 查看提交历史:
git log(查看完整提交历史)、git log --oneline(简洁模式,快速浏览所有提交)、git log --graph(图形化展示分支合并、变基记录,更直观) - 撤销工作区修改(未执行git add的文件,丢弃本地变更):
git checkout -- [文件名](谨慎使用,撤销后无法恢复) - 撤销暂存区修改(已执行git add但未commit):
git reset HEAD [文件名](文件退回工作区,保留本地修改,可重新调整后提交)
2.2 分支管理(多人协作核心)
- 查看所有分支:
git branch(*标识当前所在分支,清晰区分当前工作分支) - 创建新分支:
git branch [分支名](仅创建分支,不切换到该分支) - 切换分支:
git checkout [分支名]或git switch [分支名](两种用法均可,switch语法更直观,新手推荐) - 创建并切换分支(日常开发最常用):
git checkout -b [分支名]或git switch -c [分支名](一步完成分支创建与切换) - 合并分支:
git merge [源分支名](当前分支合并源分支内容,多人协作不推荐用于同步主干,仅适合将功能分支合并回主干) - 删除分支:
git branch -d [分支名](删除已合并到主干的分支)或git branch -D [分支名](强制删除未合并分支,谨慎使用,避免丢失代码) - 重命名分支:
git branch -m [旧分支名] [新分支名](当前分支可省略旧分支名,直接执行git branch -m [新分支名]) - 分支命名规范(多人协作必遵守,统一规范便于管理):功能分支
feature/功能名、bug修复分支bugfix/问题描述(示例:feature/login、bugfix/login-error)
3. 高级操作(多人协作必备)
3.1 Rebase 操作(核心重点,避免合并历史混乱)
3.1.1 基本使用
- 变基操作(同步远程/主干代码):
git rebase [目标分支名](将当前分支基于目标分支进行变基,整合目标分支的最新变更,保持提交历史线性) - 解决冲突(变基过程中常见场景):变基出现冲突时,按以下步骤操作:1. 打开冲突文件,修改冲突内容(保留需要的代码);2. 执行
git add [冲突文件](标记冲突已解决);3. 执行git rebase --continue(继续变基,直至全部完成) - 中止变基(冲突无法解决或不想继续变基):
git rebase --abort(退回变基前的状态,不影响本地代码) - 跳过某次提交(特殊场景):
git rebase --skip(跳过当前冲突的提交,谨慎使用,避免误删重要代码) - 交互式变基(整理提交记录):
git rebase -i [commit哈希值](可合并、修改、删除提交记录,让历史更整洁,仅用于本地未推送的提交,避免影响他人)
3.1.2 使用时机(必记,多人协作不踩坑)
- 多人协作同步远程主干代码时(优先使用,替代git merge),避免产生多余合并提交,保持历史整洁
- 将本地分支推送到远程仓库前,基于远程主分支进行变基,确保提交历史线性、干净,便于团队审核
- 整合本地多个零散提交(如多次小修改),生成清晰的提交记录,方便后续版本回溯和问题排查
3.2 Stash 操作(临时保存工作进度)
3.2.1 基本使用
- 暂存工作区修改(未执行git add/commit):
git stash(临时保存当前工作进度,工作区恢复干净,可切换分支或执行其他操作) - 暂存并添加说明(推荐,便于区分不同暂存内容):
git stash save "暂存说明"(示例:git stash save "未完成登录功能开发") - 查看暂存列表:
git stash list(显示所有暂存记录,格式:stash@{n}: 暂存说明,n为暂存序号) - 应用最近一次暂存(保留暂存记录):
git stash apply(应用后暂存记录仍存在,可多次应用) - 应用指定暂存:
git stash apply stash@{n}(n为暂存序号,从0开始,可精准应用需要的暂存内容) - 应用并删除暂存(日常常用):
git stash pop(应用暂存内容后,自动删除该暂存记录,避免暂存列表冗余) - 删除指定暂存:
git stash drop stash@{n}(删除不需要的暂存记录,释放空间) - 清空所有暂存:
git stash clear(谨慎使用,清空后所有暂存记录无法恢复)
3.2.2 使用场景
- 需要切换分支但不想提交当前工作区修改时(如临时修复紧急bug,无需提交未完成代码)
- 拉取远程代码前,暂存本地未提交修改,避免拉取时出现冲突
- 临时中断当前开发,处理其他紧急任务,保存当前工作进度,后续可继续开发
4. 远程仓库操作(多人协作核心流程)
4.1 远程仓库配置
- 查看远程仓库(确认本地与远程关联状态):
git remote -v(显示远程仓库名称、URL,默认远程名称为origin) - 添加远程仓库(本地仓库关联远程):
git remote add [远程仓库名] [远程仓库URL](示例:git remote add origin github.com/xxx/xxx.git... - 修改远程仓库URL(远程仓库地址变更时):
git remote set-url [远程仓库名] [新URL](无需删除重新添加,直接修改即可) - 删除远程仓库(解除本地与远程的关联):
git remote remove [远程仓库名]
4.2 代码推送与拉取(高频操作,多人协作重点)
- 推送分支到远程(首次推送):
git push [远程仓库名] [本地分支名](示例:git push origin feature/login,首次推送需指定远程和本地分支) - 设置上游分支(推荐,简化后续推送操作):
git push -u [远程仓库名] [本地分支名](设置后,后续可直接使用git push推送当前分支) - 拉取远程代码(核心重点,避免冲突关键):
- 普通拉取(不推荐多人协作):
git pull(等价于git fetch+git merge,会产生合并提交,导致历史混乱) - 多人协作推荐:
git pull --rebase [远程仓库名] [远程分支名](示例:git pull --rebase origin master,同步远程主干最新代码,不产生合并提交,保持历史干净)
获取远程分支信息(不合并代码):git fetch [远程仓库名](仅查看远程分支更新内容,不影响本地代码,适合先查看再决定是否合并/变基)
强制推送(谨慎使用,严禁滥用):git push -f [远程仓库名] [本地分支名](仅用于自己的功能分支,且确认远程分支无其他人修改,禁止在master/main等主干分支使用)
5. 版本回退与撤销(救急操作,避免代码丢失)
5.1 版本回退(已提交代码的回滚)
- 回退到指定提交(彻底回滚,谨慎使用):
git reset --hard [commit哈希值](哈希值可通过git log --oneline查看,回退后本地代码完全恢复到该提交状态,未提交修改会丢失) - 回退到上一个版本:
git reset --hard HEAD^(^表示上一个版本,^^表示上两个版本,以此类推) - 回退到前n个版本:
git reset --hard HEAD~n(n为数字,示例:HEAD~3表示回退3个版本)
5.2 撤销提交(保留修改,推荐使用)
- 创建新提交来撤销某次提交(远程已推送代码首选):
git revert [commit哈希值](不删除原有提交,生成新的撤销提交,避免影响他人代码) - 撤销最近一次提交(保留修改,未推送代码):
git reset --soft HEAD^(删除提交记录,修改保留在工作区,可重新调整后提交)
6. 其他常用操作
6.1 差异比较(排查修改内容,定位问题)
- 比较工作区与暂存区(未执行git add的修改):
git diff(查看本地未暂存的具体变更内容) - 比较暂存区与本地仓库(已执行git add未commit的修改):
git diff --cached或git diff --staged(查看暂存后未提交的变更) - 比较两个分支的差异:
git diff [分支1] [分支2](示例:git diff master feature/login,查看功能分支与主干的具体差异) - 比较某次提交的修改:
git diff [commit哈希值1] [commit哈希值2](查看两个提交之间的具体变更内容,便于问题回溯)
6.2 标签管理(版本标记,适合发布版本)
- 创建标签:
git tag [标签名](轻量标签,仅标记提交,无额外说明)或git tag -a [标签名] -m "标签说明"(附注标签,推荐,包含版本说明,便于区分) - 查看所有标签:
git tag(快速浏览所有已创建的标签) - 推送标签到远程:
git push [远程仓库名] [标签名](推送单个标签)或git push [远程仓库名] --tags(推送所有标签,批量操作) - 删除标签:
git tag -d [标签名](删除本地标签);git push [远程仓库名] :refs/tags/[标签名](删除远程标签,需先删除本地标签)
6.3 忽略文件(避免提交无关文件,保持仓库整洁)
- 创建
.gitignore文件(放在仓库根目录),添加需要忽略的文件或目录规则,Git会自动忽略这些文件的变更,不纳入提交范围 - 常用规则(直接复制使用,适配前端/后端开发):
*.log(忽略所有.log后缀的日志文件)/node_modules/(忽略根目录下的node_modules目录,前端开发必备)/.env(忽略环境配置文件,避免泄露密码、密钥等敏感信息)#(注释,不生效,用于说明规则用途)!/src/utils.js(反向规则,不忽略该文件,用于特殊需求)
注意:若文件已被Git提交过,即使添加到.gitignore中也不会生效,需先执行 git rm --cached [文件名],再提交一次,即可生效。
7. 问题排查与解决(日常踩坑必备,快速排障)
7.1 查看提交详情
- 查看某次提交的具体修改内容:
git show [commit哈希值](清晰显示该提交修改的文件、具体变更内容,便于排查问题)
7.2 查找特定修改
- 通过关键词查找提交(如查找修改某个功能、修复某个bug的提交):
git log -S "关键词"(大小写敏感,加-i可忽略大小写,示例:git log -S "登录功能" -i) - 通过作者查找提交:
git log --author "用户名/邮箱"(查看指定人员提交的所有记录,便于团队协作排查)
7.3 恢复误删文件
- 恢复已提交但被删除的文件(未执行git commit):
git checkout [commit哈希值] -- [文件名](从指定提交中恢复该文件,哈希值可查找删除前的提交记录) - 恢复已暂存但被删除的文件:
git restore --staged [文件名](结合git checkout命令,可完全恢复文件)
7.4 常见冲突解决补充
- 冲突标识说明:
<<<<<<< HEAD(当前分支的代码)、=======(冲突分隔线)、>>>>>>> 分支名(待合并分支的代码) - 解决原则:保留需要的代码内容,删除所有冲突标识(<<<<<<<、=======、>>>>>>>),避免代码冗余或语法错误。
8. 工作流建议(多人协作规范,必遵守)
8.1 推荐工作流(功能分支工作流,适配绝大多数团队)
- 从master/main主干分支,创建功能分支(feature/xxx)或bug修复分支(bugfix/xxx),不直接在主干开发
- 在自己的分支上开发,每天至少提交1次代码,提交说明需规范,便于团队回溯
- 开发过程中,每天至少1次同步远程主干代码(使用
git pull --rebase origin master),提前规避冲突 - 功能完成后,推送分支到远程,提交Pull Request(PR)/Merge Request(MR),等待同事Code Review(代码审核)
- 审核通过后,使用"Squash and Merge"(压缩合并)将分支合并回主干,保持主干提交历史整洁
- 合并完成后,删除功能分支(本地+远程),避免分支冗余,便于仓库管理
8.2 提交信息规范(统一格式,便于回溯和团队协作)
- 格式:
类型: 描述(冒号后加空格,描述简洁明了,不超过50字,精准说明提交内容) - 常用类型:
feat:新增功能(示例:feat: 实现用户登录验证功能)fix:修复bug(示例:fix: 修复首页轮播图无法切换的问题)refactor:重构代码(不新增功能、不修复bug,仅优化代码结构,提升可维护性)docs:修改文档(示例:docs: 更新接口说明文档)style:格式调整(不影响代码功能,如缩进、空格、代码格式规范)test:添加/修改测试用例(完善测试覆盖,保障代码质量)chore:构建/工具配置(示例:chore: 配置ESLint代码检查规则)
8.3 禁止行为(避免仓库混乱、代码丢失,必遵守)
- 禁止直接在master/main主干分支上开发、提交代码,所有开发工作均在功能/修复分支进行
- 禁止使用git merge同步远程主干代码(改用git pull --rebase,避免合并历史混乱)
- 禁止强制推送(git push -f)到主干分支,避免覆盖他人代码
- 禁止提交敏感信息(如密码、密钥、环境配置文件等,需添加到.gitignore)
- 禁止提交超大文件(如视频、安装包等,建议使用云存储链接,避免占用仓库空间)
- 禁止提交无关文件(如IDE配置、本地日志、临时文件等,需添加到.gitignore)
本教程涵盖Git全流程常用操作,包括基础配置、日常操作、分支管理、高级操作、远程仓库交互、版本控制及问题排查等核心内容,重点融入多人协作规范(如rebase用法、分支命名、提交规范),兼顾新人入门和团队日常查阅需求。建议将本教程保存为Markdown文件,方便随时调取使用,快速解决Git操作难题。