Git 完整学习笔记:从入门到团队协作
文章目录
- Git 完整学习笔记:从入门到团队协作(版本控制 + 命令 + 分支 + 冲突 + 远程仓库)
- 一、版本控制分类
- 1. 集中式版本控制
- 2. 分布式版本控制
- 二、Git 三大工作区域
- 1. 工作区(workspace)
- 2. 缓存区(index / 暂存区)
- 3. 本地仓库(repository)
- ⚠️ 注意事项
- 三、基础常用命令
- 1. 系统基础命令
- 2. VIM 编辑器基础操作
- 3. Git 全局配置命令
- 4. 代码提交与状态查看
- 5. 版本回退命令
- 6. 命令别名配置(简化日志查看)
- ⚠️ 注意事项
- 四、Git 分支管理
- 1. 核心概念
- 2. 分支常用命令
- ⚠️ 注意事项
- 五、Git 代码冲突
- 1. 冲突产生原因
- 冲突示例
- 2. 冲突解决方法
- ⚠️ 注意事项
- 六、远程仓库配置与操作
- 1. 常用远程仓库平台
- 2. SSH公钥配置(免密连接远程仓库)
- 3. 远程仓库关联与推送
- 4. 远程仓库拉取与克隆
- 七、远程代码冲突
- 1. 冲突产生场景
- 2. 解决方式
- ⚠️ 注意事项
- 八、IDE 集成 Git
Git 完整学习笔记:从入门到团队协作(版本控制 + 命令 + 分支 + 冲突 + 远程仓库)
一、版本控制分类
1. 集中式版本控制
代表工具:SVN、CVS
特点:版本数据统一存放在中央服务器,本地无完整版本备份,联网依赖强,中央服务器故障会影响所有开发者。
2. 分布式版本控制
代表工具:Git
特点:每个本地仓库都是完整版本备份,无需全程联网,安全性高、速度快、分支管理灵活。Git 是目前业界最主流的版本控制工具,承载着全球数千万开发者的项目托管,几乎所有现代 DevOps 流程都建立在 Git 之上。
二、Git 三大工作区域
Git 核心工作分区,所有操作围绕三大区域流转:工作区 → 暂存区 → 本地仓库(本文将“缓存区”统一规范为更通用的“暂存区”说法,两者等价)。
1. 工作区(workspace)
本地项目真实文件夹,日常编写、修改代码的目录,包含三种文件状态:
未跟踪:新创建的文件,未被Git管理
未暂存:已被Git管理的文件,发生修改但未提交缓存区
2. 缓存区(index / 暂存区)
临时存放代码变更的区域,用于汇总修改,统一提交到本地仓库。
核心操作:git add .将工作区所有变更提交到缓存区
3. 本地仓库(repository)
Git 本地版本仓库,永久保存每一次提交的代码版本,可回溯、可查看日志。
核心操作:git commit -m "注释"将缓存区内容永久提交到本地仓库
⚠️ 注意事项
- 慎用
git add .:该命令会暂存所有修改,可能将敏感文件(如密钥、配置文件)意外纳入版本控制。务必配合.gitignore文件忽略不需要跟踪的文件。 - 提交前检查:养成执行
git status查看暂存区内容的习惯,确认只有目标文件被暂存再提交,避免将日志、临时文件等一并提交。 - 暂存区内容及时清理:如果暂存了错误文件,可通过
git reset HEAD <file>从暂存区移除,但文件修改仍保留在工作区。
三、基础常用命令
1. 系统基础命令
touch 文件名:创建新文件clear:清空终端命令行界面ll:查看当前目录所有文件及详情
2. VIM 编辑器基础操作
i:进入编辑模式,可修改文件内容esc:退出编辑模式,进入命令模式:wq:保存修改并退出 VIM
3. Git 全局配置命令
git config --global user.name "用户名":配置全局用户名(无字符串则查看当前用户名)git config --global user.email "邮箱":配置全局邮箱(无字符串则查看当前邮箱)git config --global --list:查看所有全局配置信息
4. 代码提交与状态查看
git init:初始化本地Git仓库,将普通文件夹变为Git托管项目git add .:将工作区所有新增、修改文件添加到缓存区git commit -m "提交注释":将缓存区内容提交到本地仓库,必须填写注释说明变更git status:查看当前仓库文件状态(未跟踪、未暂存、已暂存)git log:查看详细提交日志(版本记录、作者、时间、注释)git reflog:查看所有操作记录(包含回退、删除的提交记录,可找回丢失版本)
5. 版本回退命令
git reset --hard commitid:强回退,回退到指定版本,工作区、缓存区、日志全部重置,本地修改会丢失git reset --soft commitid:软回退,仅回退仓库版本,工作区代码保留,仅日志和暂存状态变更
6. 命令别名配置(简化日志查看)
配置极简图形化日志查看别名,执行后可直接用git lg查看简洁日志
gitconfig--globalalias.lg"log --all --pretty=oneline --abbrev-commit --graph"⚠️ 注意事项
- 提交注释规范:注释应清晰描述本次变更内容和原因,推荐遵循 约定式提交 格式(如
feat: 添加用户登录、fix: 修复空指针异常),便于生成变更日志和回溯历史。 - 保持提交原子性:每次提交应只包含一个逻辑变更,避免将多个不相关的修改混在一起提交,这样回滚或查看历史时更清晰。
- 谨慎使用
git reset --hard:强回退会直接丢弃工作区和暂存区所有未提交的修改,不可恢复。建议先使用git stash暂存当前工作,再执行回退;或者创建新分支保存当前状态后再操作。 - VIM 编辑器退出:若使用
git commit不加-m参数,会进入 VIM 编辑器等待编辑提交信息。此时按i进入编辑,输入信息后按Esc,再输入:wq保存退出;若想放弃提交,输入:q!退出即可。
四、Git 分支管理
1. 核心概念
HEAD:指针,始终指向当前正在使用的分支,同一时间仅指向一个分支。
分支规范:master(主分支)→ develop(开发分支)→ feature(功能分支),bug修复从主分支拉取分支,修复完成合并回主分支。
2. 分支常用命令
git branch:查看当前所有本地分支,标注当前所在分支git branch 分支名:新建分支(不切换)git checkout 分支名:切换到指定分支git checkout -b 分支名:新建分支并直接切换到该分支(常用)git merge 分支名:在当前分支合并指定分支代码(常规在master合并功能分支)git branch -d 分支名:安全删除分支,会校验分支是否已合并,未合并则禁止删除git branch -D 分支名:强制删除分支,不做任何校验,无论是否合并均可删除
⚠️ 注意事项
- 合并前确保工作区干净:执行
git merge前务必提交或暂存当前分支的所有修改,否则合并可能失败或产生意外混乱。 - 删除分支需谨慎:使用
git branch -d删除前应确认分支代码已合并到主分支,避免丢失未合并的提交。若需强制删除,务必核实无重要代码。 - 切换分支时暂存变更:使用
git checkout切换分支前,若有未提交修改,Git 可能会阻止切换或导致修改丢失。建议先git stash保存当前进度,切换后再git stash pop恢复。 - 命名规范:建议使用有意义的短横线命名(如
feature/user-login、bugfix/issue-123),方便团队协作时快速识别分支用途。
五、Git 代码冲突
1. 冲突产生原因
多分支修改同一文件同一行代码,合并分支时Git无法自动判断保留内容,触发冲突。
冲突示例
master分支修改 test02 文件,提交更新(内容=2)
Demo分支修改同一 test02 文件同一行,提交更新(内容=3)
在master分支执行
git merge Demo,触发代码冲突
2. 冲突解决方法
打开冲突文件,删除Git自动生成的冲突标记(<<<、=====、>>>)
手动保留需要的代码(保留master代码 / 保留分支代码 / 合并两处代码)
修改完成后,执行
git add .暂存执行
git commit -m "解决分支合并冲突"提交到仓库,冲突解决
⚠️ 注意事项
- 解决冲突后务必测试:手动合并代码后,不要立刻提交,应先运行相关测试或启动项目验证,确保合并后的代码功能正常,避免引入新问题。
- 与团队沟通:如果冲突涉及多个开发者的修改,尽量和相关人员确认保留哪部分代码,防止误删他人关键逻辑。
- 善用合并工具:除了手动编辑,也可以借助 VS Code、IDEA 等 IDE 内置的冲突解决工具,通过图形化对比更直观地选择保留版本。
- 避免大范围冲突:日常开发中建议频繁将功能分支与主分支同步(
merge或rebase),减少长时间未同步导致的巨型冲突。
六、远程仓库配置与操作
1. 常用远程仓库平台
GitHub:国外平台,访问速度慢
Gitee(码云):国内平台,速度快、稳定,推荐使用(需手机号注册)
GitLab:企业级私有仓库平台
2. SSH公钥配置(免密连接远程仓库)
配置后后续拉取、推送代码无需重复输入账号密码
生成公钥:
ssh-keygen -t rsa(全程回车默认配置)查看公钥:
cat ~/.ssh/id_rsa.pub复制全部公钥内容,粘贴到Gitee/GitHub个人SSH公钥配置中
验证配置:
ssh -T git@gitee.com,提示成功即配置完成
3. 远程仓库关联与推送
git remote add origin 远程仓库SSH地址:本地仓库关联远程仓库(origin为远程仓库默认别名)git remote:查看已关联的远程仓库git branch -vv:查看本地分支与远程分支的绑定关联关系git push origin master:将本地master分支代码推送到远程仓库git push --set-upstream origin master:master:绑定本地与远程master分支,绑定后可直接使用git push推送git push -f:强制覆盖远程仓库代码(谨慎使用,易丢失远程代码)
4. 远程仓库拉取与克隆
git clone 远程仓库SSH地址:克隆远程仓库到本地(首次拉取项目使用,仅一次)git fetch:抓取远程仓库最新代码,不自动合并本地分支git pull:拉取远程代码并自动合并本地分支(等价于 fetch + merge)
七、远程代码冲突
1. 冲突产生场景
远程仓库文件、本地仓库文件修改了同一行代码,执行git pull拉取远程代码时,触发合并冲突。
2. 解决方式
与本地分支冲突解决方式一致:手动修改冲突文件 → 整理代码 →git add .暂存 →git commit提交,完成冲突修复。
⚠️ 注意事项
- 拉取前先提交或暂存本地修改:执行
git pull前,确保本地工作区干净(已提交或 stash),否则可能因冲突导致合并失败。 - 避免强制推送:
git push -f会覆盖远程历史,切勿在共享分支(如 master/main)上使用。如果确实需要改写历史,应使用git push --force-with-lease并提前告知团队成员。 - 频繁同步:在开始新工作前先执行
git pull,定期与远程保持同步,能够大幅度减少远程冲突的发生概率。 - 处理冲突后重新推送:解决冲突并提交后,执行
git pull确认无新冲突,再执行git push将修复推送到远程。
八、IDE 集成 Git
IDEA、VS Code 均内置Git工具,无需频繁操作命令行:
支持可视化克隆远程仓库、切换分支、提交、推送、拉取代码
图形化展示代码冲突,可视化解决冲突,操作更便捷