Git 全套实操|配置 /.gitignore/ 分支合并 / 冲突解决 /git stash 完整教程

一、Git Config 三级配置(全局 / 仓库 / 系统)

1.1 三层配置优先级

优先级从高到低:本地仓库 (local) > 用户全局 (global) > 系统 (system),高配置覆盖低配置。

  1. local:当前项目.git/config,仅本仓库生效
  2. global:用户目录.gitconfig,本机所有仓库(开发最常用)
  3. 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 右键无法直接创建,两种方案:

  1. Git Bash 命令创建

bash

复制代码
touch .gitignore
  1. 新建文件命名gitignore.,保存后系统自动修正为.gitignore

2.3 匹配语法规则

  1. # 开头、空行为注释,Git 忽略不解析
  2. * 任意多字符;? 单个字符;[0-9] 数字区间
  3. 末尾/代表目录,如target/忽略整个打包文件夹
  4. ! 取反,代表强制不忽略该文件
  5. **/ 递归匹配所有层级目录

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 删除分支

  1. 普通删除:仅允许删除已合并分支

bash

复制代码
git branch -d dev2
  1. 强制删除:分支未合并、存在未提交代码

bash

复制代码
git branch -D dev2

注意:不能删除当前正在使用的分支,必须切换其他分支后再删除。

4.4 分支合并 merge

开发完成后,将功能分支合并到主分支流程:

bash

复制代码
# 切换至稳定主分支
git checkout master
# 合并dev2分支全部代码
git merge dev2

4.5 合并冲突完整解决流程

冲突触发条件:两个分支修改同一个文件同一行代码,Git 无法自动融合。

  1. 打开冲突文件,查看标记:

plaintext

复制代码
<<<<<<< HEAD
master分支原有代码
=======
dev2分支修改代码
>>>>>>> dev2
  1. 手动删除<<<<<< ===== >>>>>>标记,保留最终业务代码;
  2. 保存文件,提交完成合并:

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 标准业务流程

  1. dev 分支开发一半代码 → git stash 临时保存
  2. git checkout hotfix 切换 bug 修复分支
  3. 修复、测试、合并 bug 代码到 master
  4. 切回 dev 分支 → git stash pop 恢复半成品代码继续开发

六、文末总结

  1. 开发环境初始化先配置全局用户名邮箱,一劳永逸;
  2. 新项目第一时间编写.gitignore,杜绝垃圾文件提交仓库;
  3. 新功能单独创建分支开发,不直接在 master 修改代码;
  4. 合并冲突手动清理标记后再提交,保证代码逻辑正确;
  5. 中途切换分支使用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
相关推荐
ERD Online3 小时前
我们怎么设计 good first issue:让第一个 PR 两小时内合入
数据库·git·后端·开源·issue
Python私教14 小时前
Codex 自动写 Commit 够安全吗?一套证据化 Git 提交流程
人工智能·git·后端
果果燕15 小时前
实习笔记(一):NFS、Samba、VNC、Git、CMake、systemd、内核、交叉编译
linux·arm开发·c++·笔记·git
美味蛋炒饭.16 小时前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
互联网中的一颗神经元16 小时前
09 — .git 地图:打开那个隐藏文件夹
大数据·git·elasticsearch
Patrick_Wilson18 小时前
你知道 git check 的故事吗
git·程序员·命令行
互联网中的一颗神经元19 小时前
10 — 对象模型:.git/objects 里到底装了什么
git
沫璃染墨21 小时前
《从零入门Linux系统篇(十四):系统工具篇·五——Git版本控制:从版本管理到协同开发》
linux·运维·服务器·git·gitee·github
Slow菜鸟1 天前
第5篇:进阶规范篇 · 团队协作最佳实践
git