一、Git Config 三级配置(全局 / 仓库 / 系统)
1.1 三层配置优先级
优先级从高到低:本地仓库 (local) > 用户全局 (global) > 系统 (system),高配置覆盖低配置。
- local:当前项目
.git/config,仅本仓库生效 - global:用户目录
.gitconfig,本机所有仓库(开发最常用) - system:Git 安装目录配置,本机全部用户
1.2 查看配置命令
bash
# 查看仓库专属配置
git config --local -l
# 查看全局配置(推荐日常使用)
git config --global -l
# 查看系统全局配置
git config --system -l
1.3 必备:配置提交用户名 & 邮箱
每次提交记录都会携带用户名邮箱,克隆新项目不用重复配置,全局一次搞定:
bash
# 设置全局用户名
git config --global user.name "张三"
# 设置全局邮箱(gitee/github注册邮箱)
git config --global user.email "zhangsan@163.com"
注意:禁止手动修改配置文件,全部通过
git config命令操作,避免格式报错。
1.4 配置加载规则
Git 读取顺序:系统配置 → 全局用户配置 → 当前仓库配置,后加载的同名参数直接覆盖前面配置。
二、.gitignore 忽略文件(解决垃圾文件提交问题)
2.1 作用
过滤不需要纳入版本控制的文件:IDE 缓存、编译 class、Maven 打包 target、日志、系统隐藏文件,不会追踪、不会提交到远程仓库。
2.2 Windows 创建 .gitignore
Windows 右键无法直接创建,两种方案:
- Git Bash 命令创建
bash
touch .gitignore
- 新建文件命名
gitignore.,保存后系统自动修正为.gitignore
2.3 匹配语法规则
#开头、空行为注释,Git 忽略不解析*任意多字符;?单个字符;[0-9]数字区间- 末尾
/代表目录,如target/忽略整个打包文件夹 !取反,代表强制不忽略该文件**/递归匹配所有层级目录
2.4 匹配示例
properties
# 忽略全部class编译文件
*.class
# 仅忽略项目根目录logs.txt
/logs.txt
# 忽略整个日志文件夹
logs/
# 递归所有目录下tmp文件夹
**/tmp/
# 忽略所有txt,但保留classes下a.txt
*.txt
!/classes/a.txt
# 只忽略tmp目录内txt文件
tmp/*.txt
2.5 Java 项目通用完整模板(直接复制使用)
properties
# Java编译文件
*.class
# Maven/Gradle打包目录
target/
build/
# 压缩包
*.war
*.jar
*.zip
*.tar.gz
*.rar
# IDEA缓存文件
.idea/
*.iml
*.ipr
*.iws
# Eclipse工程文件
.project
.classpath
.settings/
# 日志文件
*.log
# 系统缓存
.DS_Store
Thumbs.db
# 临时文件
*.tmp
*.cache
*.diff
*.patch
2.6 全局统一忽略(所有项目生效)
配置后本机所有 Git 仓库共用一套忽略规则:
bash
git config --global core.excludesfile ~/.gitignore
2.7 常见踩坑:.gitignore 不生效
原因:文件已经被 Git 追踪(执行过 add/commit),忽略规则对已追踪文件无效。 解决方案清除本地缓存:
bash
# 清除单个文件追踪
git rm --cached 文件名
# 清空全部文件缓存
git rm --cached -r .
# 重新提交忽略配置
git add .
git commit -m "优化.gitignore过滤规则"
三、git diff 对比代码差异
git diff 用于查看工作区、暂存区、本地仓库三者之间代码改动,4 种高频场景:
3.1 工作区 vs 暂存区(未执行 git add 的修改)
bash
# 查看单个文件改动
git diff readme.txt
# 查看全部文件改动
git diff
3.2 暂存区 vs 本地仓库(已 add 未 commit)
bash
git diff --cached
git diff --cached readme.txt
3.3 工作区 vs 本地仓库最新版本
bash
# 对比最新一次提交
git diff HEAD
# 对比上一次提交
git diff HEAD^
3.4 两个历史提交版本对比
bash
git diff 版本号1 版本号2
标识说明
HEAD:本地仓库最新提交HEAD^:上一次提交记录HEAD~100:往前 100 次提交a/:旧文件;b/:修改后新文件
四、Git 分支全套操作(创建 / 切换 / 合并 / 冲突)
4.1 分支底层原理
Git 分支只是提交记录的轻量指针,创建分支不复制全部代码,速度极快。
master/main:线上稳定主分支,存放可上线代码HEAD:指针,指向当前正在操作的分支 开发规范:master 只合并完成功能,新功能新建独立 feature 分支开发。
4.2 分支基础命令
bash
# 查看本地所有分支,*代表当前分支
git branch
# 仅创建dev分支,不切换
git branch dev
# 创建dev2并立刻切换(最常用)
git checkout -b dev2
# 切换已有分支
git checkout dev
4.3 删除分支
- 普通删除:仅允许删除已合并分支
bash
git branch -d dev2
- 强制删除:分支未合并、存在未提交代码
bash
git branch -D dev2
注意:不能删除当前正在使用的分支,必须切换其他分支后再删除。
4.4 分支合并 merge
开发完成后,将功能分支合并到主分支流程:
bash
# 切换至稳定主分支
git checkout master
# 合并dev2分支全部代码
git merge dev2
4.5 合并冲突完整解决流程
冲突触发条件:两个分支修改同一个文件同一行代码,Git 无法自动融合。
- 打开冲突文件,查看标记:
plaintext
<<<<<<< HEAD
master分支原有代码
=======
dev2分支修改代码
>>>>>>> dev2
- 手动删除
<<<<<<=====>>>>>>标记,保留最终业务代码; - 保存文件,提交完成合并:
bash
git add .
git commit -m "解决分支代码合并冲突"
4.6 图形化查看分支提交树
bash
git log --graph
五、git stash 临时存放未提交代码
5.1 使用场景
正在开发新功能,代码写了一半不适合提交,但需要切换分支修复线上 bug;使用stash把工作区 + 暂存区所有修改存入堆栈,切换分支无残留。
5.2 全套 stash 命令
bash`
# 暂存当前所有修改,备注说明
git stash save "购物车功能开发半成品"
# 查看堆栈内所有临时记录
git stash list
# 恢复代码,保留堆栈记录
git stash apply
# 恢复代码并删除堆栈记录(日常首选)
git stash pop
# 删除指定堆栈记录
git stash drop stash@{0}
# 清空全部暂存堆栈
git stash clear
5.3 标准业务流程
- dev 分支开发一半代码 →
git stash临时保存 git checkout hotfix切换 bug 修复分支- 修复、测试、合并 bug 代码到 master
- 切回 dev 分支 →
git stash pop恢复半成品代码继续开发
六、文末总结
- 开发环境初始化先配置全局用户名邮箱,一劳永逸;
- 新项目第一时间编写
.gitignore,杜绝垃圾文件提交仓库; - 新功能单独创建分支开发,不直接在 master 修改代码;
- 合并冲突手动清理标记后再提交,保证代码逻辑正确;
- 中途切换分支使用
git stash,避免生成无意义提交记录;
常用命令速查表
| 功能 | 命令 |
|---|---|
| 全局配置账号 | git config --global user.name/email |
| 查看代码差异 | git diff / git diff --cached |
| 创建并切换分支 | git checkout -b 分支名 |
| 合并分支 | git merge 分支名 |
| 强制删除分支 | git branch -D 分支名 |
| 临时保存半成品 | git stash save 备注 |
| 恢复暂存代码 | git stash pop |