Git 完整学习笔记:从入门到团队协作

文章目录

  • [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-loginbugfix/issue-123),方便团队协作时快速识别分支用途。

五、Git 代码冲突

1. 冲突产生原因

多分支修改同一文件同一行代码,合并分支时Git无法自动判断保留内容,触发冲突。

冲突示例
  1. master分支修改 test02 文件,提交更新(内容=2)

  2. Demo分支修改同一 test02 文件同一行,提交更新(内容=3)

  3. 在master分支执行 git merge Demo,触发代码冲突

2. 冲突解决方法

  1. 打开冲突文件,删除Git自动生成的冲突标记(<<<、=====、>>>)

  2. 手动保留需要的代码(保留master代码 / 保留分支代码 / 合并两处代码)

  3. 修改完成后,执行 git add . 暂存

  4. 执行 git commit -m "解决分支合并冲突" 提交到仓库,冲突解决

⚠️ 注意事项

  • 解决冲突后务必测试:手动合并代码后,不要立刻提交,应先运行相关测试或启动项目验证,确保合并后的代码功能正常,避免引入新问题。
  • 与团队沟通:如果冲突涉及多个开发者的修改,尽量和相关人员确认保留哪部分代码,防止误删他人关键逻辑。
  • 善用合并工具:除了手动编辑,也可以借助 VS Code、IDEA 等 IDE 内置的冲突解决工具,通过图形化对比更直观地选择保留版本。
  • 避免大范围冲突 :日常开发中建议频繁将功能分支与主分支同步(mergerebase),减少长时间未同步导致的巨型冲突。

六、远程仓库配置与操作

1. 常用远程仓库平台

  • GitHub:国外平台,访问速度慢

  • Gitee(码云):国内平台,速度快、稳定,推荐使用(需手机号注册)

  • GitLab:企业级私有仓库平台

2. SSH公钥配置(免密连接远程仓库)

配置后后续拉取、推送代码无需重复输入账号密码

  1. 生成公钥:ssh-keygen -t rsa(全程回车默认配置)

  2. 查看公钥:cat ~/.ssh/id_rsa.pub

  3. 复制全部公钥内容,粘贴到Gitee/GitHub个人SSH公钥配置中

  4. 验证配置: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工具,无需频繁操作命令行:

  • 支持可视化克隆远程仓库、切换分支、提交、推送、拉取代码

  • 图形化展示代码冲突,可视化解决冲突,操作更便捷

相关推荐
minglie11 小时前
zynq的xlnx_rebase_v5.4_2020.2分支打patch-5.4.3-rt1.patch.xz补丁
学习
罗西的思考2 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 — (14)— Teacher
人工智能·笔记·深度学习·算法·机器学习
醉城夜风~2 小时前
HTML常用标签详解学习博客:从基础标签到页面结构完整掌握
前端·学习·html
minglie13 小时前
蚂蚁S9矿板PS 内核定时器驱动
学习
你想知道什么?3 小时前
决策树-学习笔记
笔记·学习·决策树
MartinYeung53 小时前
[论文学习]WASP:面向提示注入攻击的Web代理安全性基准测试
前端·网络·学习
懒狗跑ai的程序员Brain4 小时前
如何利用粒子系统在unity制作一个烟花(粒子系统学习向)
学习·unity·游戏引擎
念何架构之路4 小时前
moby-BuildKit(builder-next)
学习·docker·容器
hongmai6668884 小时前
ESP32-C5-WROOM-1-N16R8:双频Wi-Fi 6与多协议融合,重新定义物联网连接新标准
笔记·嵌入式硬件·物联网·智能路由器·risc-v