当前位置: 首页 > news >正文

Git 简明教程:从原理到实战

一、Git 的前世今生

诞生背景

Git 诞生于 2005 年,由 Linux 内核创始人 Linus Torvalds 开发。当时 Linux 内核开发团队使用的分布式版本控制工具 BitKeeper 停止免费授权,Linus 不满于现有工具的性能和可靠性,花了两周时间亲自编写了 Git 的核心代码。

发展历程

  1. 2005 年:首次发布,仅支持命令行操作
  2. 2008 年:GitHub 上线,推动 Git 成为行业标准
  3. 如今:Git 已成为全球最流行的版本控制系统,几乎所有软件开发团队都在使用

为什么选择 Git?

  1. 分布式:每个开发者都有完整的代码库,不依赖中央服务器
  2. 高性能:本地操作速度极快,适合大型项目(如 Linux 内核)
  3. 完整性:通过哈希算法确保代码不被篡改
  4. 灵活性:支持多种工作流,适应不同团队协作方式

二、Git 核心原理

1. 分布式架构

与 SVN 等集中式版本控制工具不同,Git 是分布式的:

  1. 没有单一的中央服务器(虽然实际开发中会用 GitHub/GitLab 作为协作中心)
  2. 每个开发者的本地仓库包含完整的代码历史和元数据
  3. 可离线工作,联网后再同步变更

2. 三个核心区域

Git 工作区分为三个关键区域:

  1. 工作区(Working Directory:我们实际编辑代码的地方
  2. 暂存区(Staging Area:临时存放即将提交的变更(也叫索引区)
  3. 本地仓库(Local Repository:存储所有提交历史的数据库

示意图:工作区 → 暂存区 → 本地仓库 → 远程仓库

3. 快照而非差异

Git 保存的是代码库在特定时刻的完整快照,而非文件间的差异。这使得版本切换和历史查看非常高效。每个提交都有一个唯一的哈希值(SHA-1 算法生成的 40 位字符串)作为标识。

三、Git 常用命令

第一阶段:初始化与配置

1. 安装验证

git --version

# 示例输出:git version 2.34.1

2. 配置用户信息

首次使用 Git 必须配置,用于标识提交者身份:

git config --global user.name "Your Name"

git config --global user.email "your.email@example.com"

# 查看配置

git config --list

场景:团队协作时,通过用户名和邮箱区分不同开发者的提交

3. 初始化本地仓库

# 创建并进入项目文件夹

mkdir my-project

cd my-project

# 初始化 Git 仓库

git init

# 输出:Initialized empty Git repository in /path/to/my-project/.git/

场景:开始一个新项目时,将其转为 Git 管理的仓库

4. 克隆远程仓库

git clone https://github.com/example/user-repo.git

# 克隆到指定文件夹

git clone https://github.com/example/user-repo.git my-folder

场景:参与已有项目时,从远程仓库(如 GitHub)复制代码到本地

第二阶段:日常开发操作

5. 查看文件状态

git status

# 简洁输出

git status -s

示例输出:

On branch main

Untracked files:

  (use "git add <file>..." to include in what will be committed)

        README.md

场景:日常开发中,随时查看哪些文件有修改或未被跟踪

6. 添加文件到暂存区

# 添加单个文件

git add README.md

# 添加所有修改的文件

git add .

# 添加特定类型文件

git add *.js

场景:完成某个功能点后,将相关文件加入暂存区准备提交

7. 提交变更到本地仓库

git commit -m "添加 README 文件,说明项目用途"

提交规范建议:用简洁的语言描述 "做了什么",而非 "怎么实现的"

8. 查看提交历史

# 基本查看

git log

# 简洁查看(一行显示一个提交)

git log --oneline

# 查看最近3次提交

git log -3

示例输出:

a1b2c3d (HEAD -> main) 添加 README 文件

e4f5g6h 初始化项目结构

场景:查看项目历史变更,或查找某个功能是何时添加的

9. 撤销工作区修改

git checkout -- README.md

场景:误修改了文件,想恢复到最近一次提交的状态

10. 撤销暂存区文件

# 从暂存区移除,但保留工作区修改

git reset HEAD README.md

场景:不小心把不需要提交的文件加入了暂存区

第三阶段:分支操作

11. 查看分支

git branch

# 带详细信息的查看

git branch -v

示例输出:

* main

  feature/login

*表示当前所在分支

12. 创建分支

git branch feature/user-profile

场景:开发新功能时,创建专门的分支,避免影响主分支

13. 切换分支

git checkout feature/user-profile

# Git 2.23+ 推荐使用

git switch feature/user-profile

场景:需要在不同功能分支间切换开发

14. 创建并切换分支(常用)

git checkout -b feature/payment

#

git switch -c feature/payment

场景:快速创建新分支并立即开始工作

15. 合并分支

# 先切换到目标分支(通常是 main develop

git switch main

# 合并 feature 分支

git merge feature/login

场景:新功能开发完成后,将其合并到主分支

16. 删除分支

# 删除已合并的分支

git branch -d feature/login

# 强制删除未合并的分支(谨慎使用)

git branch -D feature/old-function

场景:功能上线后,清理不再需要的开发分支

第四阶段:远程仓库交互

17. 查看远程仓库

git remote

# 带详细信息

git remote -v

示例输出:

origin  https://github.com/example/my-project.git (fetch)

origin  https://github.com/example/my-project.git (push)

18. 添加远程仓库

git remote add origin https://github.com/your-username/your-repo.git

场景:将本地新建的仓库关联到远程 GitHub/GitLab 仓库

19. 拉取远程更新

git pull origin main

场景:多人协作时,先获取远程最新代码,避免冲突

20. 推送本地提交

# 首次推送分支

git push -u origin main

# 后续推送

git push origin main

场景:完成本地开发后,将代码推送到远程仓库,供团队其他成员使用

21. 拉取远程分支

git pull origin feature/new-ui

场景:获取团队其他成员在特定分支上的开发成果

第五阶段:进阶操作

22. 查看提交差异

# 工作区与暂存区的差异

git diff

# 暂存区与本地仓库的差异

git diff --cached

# 两个分支之间的差异

git diff main feature/payment

场景:提交前检查修改内容,或比较不同分支的差异

23. 暂存工作区( stash )

# 暂存当前工作

git stash

# 查看暂存列表

git stash list

# 恢复最近的暂存

git stash pop

# 恢复指定暂存

git stash apply stash@{1}

场景:需要临时切换分支,但当前工作还不想提交时

24. 标签重要版本

# 创建标签(通常用于发布版本)

git tag v1.0.0

# 带说明的标签

git tag -a v1.0.0 -m "正式发布1.0版本"

# 推送标签到远程

git push origin v1.0.0

场景:发布正式版本时,给重要的提交打上标签,方便后续追溯

25. 回退到历史版本

# 方法1:保留后续修改(推荐)

git revert a1b2c3d

# 方法2:直接回退(会丢失后续提交,谨慎使用)

git reset --hard a1b2c3d

场景:发现最新提交有问题,需要恢复到之前的稳定版本

四、常用工作流示例

单人开发流程

  1. git clone 克隆仓库(首次)或 git pull 更新代码
  2. git switch -c feature/new-function 创建新功能分支
  3. 编写代码...
  4. git add . 添加修改
  5. git commit -m "实现xxx功能" 提交
  6. 重复 3-5 步完善功能
  7. git switch main 切换到主分支
  8. git merge feature/new-function 合并功能
  9. git push 推送到远程

团队协作流程

  1. 成员 A: git switch -c feature/login 开发登录功能并推送
  2. 成员 B: git pull origin feature/login 获取 A 的代码
  3. 成员 B: 在该分支继续开发并推送
  4. 功能完成后,通过 PR/MR(拉取请求)进行代码审查
  5. 审查通过后合并到主分支
  6. 其他成员: git pull origin main 获取最新主分支代码

五、学习资源

  1. 官方文档:https://git-scm.com/doc
  2. 可视化工具:GitKraken、SourceTree(适合新手理解 Git 操作)
  3. 在线练习:Learn Git Branching(https://learngitbranching.js.org/)

http://www.dtcms.com/a/394123.html

相关文章:

  • 【设计模式】中介者模式
  • nginx添加modsecurity插件
  • 代码上传Github:SSH法
  • 【iOS】AFNetworking初步了解及使用
  • JVM实战-G1参数调优
  • 超简单的视频分割脚本
  • 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)
  • 在 Windows 系统上安装官方 Codex CLI 教程
  • Redis 配置与优化全攻略
  • 二分查找左右边界写法
  • Oracle体系结构-Large Pool详解
  • Elasticsearch面试精讲 Day 19:磁盘IO与存储优化
  • 【AI智能体】Dify 搭建数据分析应用实战操作详解
  • Nginx localtion / 、/a、/a/ 的区别
  • 【C++】string的使用与模拟实现
  • 新手向 算法 希尔排序-yang
  • 如何用RAG增强的动态能力与大模型结合打造企业AI产品?
  • 黑马头条_SpringCloud项目阶段五:openFeign服务接入以及接入腾讯云内容安全服务实现文章提交违规信息自动审核
  • Spring、SpringBoot框架核心流程详解
  • 195. Java 异常 - finally 块:Java 中的“兜底侠”
  • C语言底层学习(2.指针与数组的关系与应用)(超详细)
  • 008 Rust注释
  • ubuntu防火墙开放端口
  • ​MySQL 8.0.29 RPM 安装教程(CentOS 7 / RHEL 7 详细步骤)​附安装包
  • AIPPT:AI一键生成高质量PPT
  • [已更新]2025华为杯E题数学建模研赛E题研究生数学建模思路代码文章成品:高速列车轴承智能故障诊断问题
  • 从零到一:Vue3 + Spring Boot + MySQL 全栈项目部署到阿里云服务器完整教程
  • 微服务基础2-网关路由
  • ubuntu创建新用户
  • 黑豹X2(Panther-x2)armbian 驱动NPU/VPU的驱动下载安装