文章目录
- [Git 完整学习笔记:从入门到团队协作(版本控制 + 命令 + 分支 + 冲突 + 远程仓库)](#Git 完整学习笔记:从入门到团队协作(版本控制 + 命令 + 分支 + 冲突 + 远程仓库))
-
- 一、版本控制分类
-
- [1. 集中式版本控制](#1. 集中式版本控制)
- [2. 分布式版本控制](#2. 分布式版本控制)
- [二、Git 三大工作区域](#二、Git 三大工作区域)
-
- [1. 工作区(workspace)](#1. 工作区(workspace))
- [2. 缓存区(index / 暂存区)](#2. 缓存区(index / 暂存区))
- [3. 本地仓库(repository)](#3. 本地仓库(repository))
- [⚠️ 注意事项](#⚠️ 注意事项)
- 三、基础常用命令
-
- [1. 系统基础命令](#1. 系统基础命令)
- [2. VIM 编辑器基础操作](#2. VIM 编辑器基础操作)
- [3. Git 全局配置命令](#3. Git 全局配置命令)
- [4. 代码提交与状态查看](#4. 代码提交与状态查看)
- [5. 版本回退命令](#5. 版本回退命令)
- [6. 命令别名配置(简化日志查看)](#6. 命令别名配置(简化日志查看))
- [⚠️ 注意事项](#⚠️ 注意事项)
- [四、Git 分支管理](#四、Git 分支管理)
-
- [1. 核心概念](#1. 核心概念)
- [2. 分支常用命令](#2. 分支常用命令)
- [⚠️ 注意事项](#⚠️ 注意事项)
- [五、Git 代码冲突](#五、Git 代码冲突)
-
- [1. 冲突产生原因](#1. 冲突产生原因)
- [2. 冲突解决方法](#2. 冲突解决方法)
- [⚠️ 注意事项](#⚠️ 注意事项)
- 六、远程仓库配置与操作
-
- [1. 常用远程仓库平台](#1. 常用远程仓库平台)
- [2. SSH公钥配置(免密连接远程仓库)](#2. SSH公钥配置(免密连接远程仓库))
- [3. 远程仓库关联与推送](#3. 远程仓库关联与推送)
- [4. 远程仓库拉取与克隆](#4. 远程仓库拉取与克隆)
- 七、远程代码冲突
-
- [1. 冲突产生场景](#1. 冲突产生场景)
- [2. 解决方式](#2. 解决方式)
- [⚠️ 注意事项](#⚠️ 注意事项)
- [八、IDE 集成 Git](#八、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 查看简洁日志
bash
git config --global alias.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工具,无需频繁操作命令行:
-
支持可视化克隆远程仓库、切换分支、提交、推送、拉取代码
-
图形化展示代码冲突,可视化解决冲突,操作更便捷