CI/CD(二)—— Git 基础操作全攻略:从入门到实战
文章目录
- 前言
- 一、Git 概述
- 1.1 Git 是什么
- 1.2 Git 和 SVN 的区别
- 1.2.1 核心差异要点
- 1.2.2 适用场景对比表
- 1.3 用“记账本”理解 Git 与 SVN(生活化比喻)
- 二、环境安装与配置
- 2.1 安装 Git
- 2.2 配置用户信息(全局)
- 2.3 查看配置与配置文件位置
- 三、Git 的三大区域
- 四、初始化与常用操作(从 0 到 1)
- 4.1 创建/初始化仓库
- 4.2 查看状态(工作区/暂存区概况)
- 4.3 添加到暂存区(只有暂存区有内容才可提交)
- 4.4 撤销暂存(从暂存区移出)
- 4.5 commit提交到版本库
- 4.6 查看当前版本库跟踪的文件
- 4.7 同时从暂存区与工作区删除文件
- 4.8 commit提交到版本库,彻底删除
- 4.9 查看提交历史
- 4.10 在历史之间切换与回到主分支
- 4.11 从暂存区恢复被删文件(恢复工作区)
- 4.11.1 `git checkout -- *` 与 `git checkout -- .` 的范围差异
- 五、标签(Tag)管理
- 六、分支(Branch)管理
- 6.1 查看与创建分支
- 6.2 切换分支并提交改动
- 6.3 回到主分支并合并
- 6.4 删除分支
- 6.5 使用 .gitignore 忽略无需纳入版本库的文件
- 总结
前言
本文围绕为何选择 Git、如何安装配置、核心区块如何运作、常用命令如何落地四个问题展开,配合完整命令与输出示例,辅以表格对比与生活化比喻,帮助你快速从 0 到 1 掌握 Git 的基础使用。
文章最后还包含分支与标签(tag)管理、忽略规则(.gitignore)等实用内容,便于直接用于日常开发。
适用人群:刚接触版本控制的同学、需要从 SVN 迁移或系统梳理 Git 常用命令的开发者
运行环境:Linux Shell(文中示例基于 CentOS/RHEL 系)
一、Git 概述
1.1 Git 是什么
- Git 是一个开源的分布式版本控制系统(Distributed Version Control System, DVCS),最初由 Linus Torvalds 为管理 Linux 内核而开发。
- 相比 CVS、SVN 等集中式工具,Git 采用分布式版本库:每位开发者本地就有完整历史,绝大多数操作在本地完成,离线也能提交、查看历史、切换分支等。
1.2 Git 和 SVN 的区别
1.2.1 核心差异要点
- 分布式 vs. 集中式
Git 分布式、可离线提交;SVN 集中式、强依赖中央服务器。 - 性能与存储
Git 本地操作快、差异与压缩存储效率高;SVN 网络交互频繁。 - 分支管理
Git 分支轻量、创建合并高效;SVN 分支为目录拷贝,较“笨重”。 - 工作方式
Git 的提交(commit)与推送(push)分离;SVN 提交即上服务器。 - 学习曲线
Git 强大但概念多;SVN 简单直观。 - 平台支持
Git 非常适合大规模开发和复杂的代码协作;SVN 与一些老旧的企业工具集成较好。
1.2.2 适用场景对比表
| 特性 | Git | SVN |
|---|---|---|
| 开发团队规模 | 适合大规模分布式团队、开源项目 | 适合小团队或集中管理 |
| 网络依赖 | 本地操作为主,离线可用 | 高度依赖网络与中央库 |
| 分支操作 | 轻量、快速、合并友好 | 目录复制,较重、容易冲突 |
| 学习成本 | 略高,功能强大 | 低,上手快 |
| 项目类型 | 大型复杂项目 | 小型简单项目 |
| 容灾能力 | 高:本地保留完整历史 | 低:依赖服务器备份 |
1.3 用“记账本”理解 Git 与 SVN(生活化比喻)
- Git:每人一本账本(分布式)
你可以随时在本子上记账、查历史,不用找“班长”;需要对账时再把各自账本汇总到“总账本”。 - SVN:只有一本公共账本(集中式)
必须找“班长”登记;班长不在就记不了账。
小结:Git 灵活高效,适合现代协作;SVN 简单直接,适合集中式管理的轻量场景。
二、环境安装与配置
2.1 安装 Git
# 安装与版本查看
yum -y install git
git --version
2.2 配置用户信息(全局)
# 配置全局用户名与邮箱(影响当前用户的所有仓库)
git config --global user.name "yjs"
git config --global user.email "yjs@yjs.com"# 设置默认编辑器
git config --global core.editor vim
2.3 查看配置与配置文件位置
# 查看所有配置
git config --list# 全局配置写入 ~/.gitconfig
# 如果使用 --global 选项,那么配置的用户信息会保存在当前用户家目录下的 .gitconfig 文件里, 以后所有的项目都会默认使用此用户信息。
cat ~/.gitconfig# 若在某个仓库内去掉 --global,则写入该仓库 .git/config


三、Git 的三大区域
- 工作区(Working Directory):你能看见与编辑的目录与文件。
- 暂存区(Staging Area/Index):待提交清单,决定本次提交包括哪些变更(一般存放在 .git 目录下的 index 文件(.git/index)中)。
- 版本库(Repository/.git):历史档案柜,存储所有提交历史与对象。
记忆法:桌面(工作区) → 待提交清单(暂存区) → 文件柜(版本库)。
四、初始化与常用操作(从 0 到 1)
4.1 创建/初始化仓库
# 方法一:在新目录创建空仓库
cd /opt
git init mypro
# 输出:初始化空的 Git 版本库于 /opt/mypro/.git/ls -A /opt/mypro/
# .git

# 方法二:对已有目录初始化
mkdir /root/myweb
cd /root/myweb
echo '<h1>this is my web</h1>' > index.html
git init
ls -A
# .git index.html

4.2 查看状态(工作区/暂存区概况)
git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# index.html
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)git status -s # 简洁模式
# ?? index.html 表示未跟踪(Untracked)
状态缩写:
1、??未跟踪(Untracked)
2、A已新增到暂存区(Added)
3、M被修改(Modified)
4、D被删除(Deleted)

4.3 添加到暂存区(只有暂存区有内容才可提交)
git add .
git status -s
# A index.html
git status # 详细状态

4.4 撤销暂存(从暂存区移出)
git rm --cached index.html
git status -s
# ?? index.html
# 然后可重新选择添加:git add index.html 或 git add .

4.5 commit提交到版本库
git add index.html
git commit -m "init"git status
# 无文件要提交,干净的工作区

4.6 查看当前版本库跟踪的文件
git ls-files
# index.html

4.7 同时从暂存区与工作区删除文件
git rm index.html
ls
# index.html 已不存在git status
# 要提交的变更:删除:index.html

4.8 commit提交到版本库,彻底删除
git commit -m "rm index.html"
git status
# 无文件要提交,干净的工作区

4.9 查看提交历史
git log
# commit cd5be4bdc6b438544e3d311af271723d2720c268
# commit ... rm index.html
# commit 4452f6400985db71de32fe6a3506f860a7042c46
# commit ... init

4.10 在历史之间切换与回到主分支
# 切换到指定提交快照(演示哈希示例)
git checkout 4452f6400985db71de32fe6a3506f860a7042c46
ls
# index.html 回来了(来自历史快照)

# 回到最新 master
git checkout master
ls
# index.html 不在(回到当前主分支状态)

提示:在回到历史提交后的**游离 HEAD(detached HEAD)**状态下,不建议直接修改并提交,以免日后合并混乱。
4.11 从暂存区恢复被删文件(恢复工作区)
# 准备数据
cp /etc/passwd /etc/shadow /etc/hosts ./
ls
hosts passwd shadowgit add .
git status -s
# A hosts
# A passwd
# A shadow

# 误删
rm -rf *
git status -s
# AD hosts
# AD passwd
# AD shadow
git status

# 用 checkout 丢弃工作区的改动以恢复文件
git checkout -- .
ls
# hosts passwd shadow

4.11.1 git checkout -- * 与 git checkout -- . 的范围差异
| 命令 | 作用范围 | 是否包含子目录 |
|---|---|---|
git checkout -- * | 当前目录下所有文件 | 否 |
git checkout -- . | 当前目录及所有子目录 | 是 |
注意:该操作会直接丢弃未保存的本地改动。若文件未加入暂存区,会恢复到“最近一次提交”的内容;若已加入暂存区,会恢复到“暂存区”的内容。
五、标签(Tag)管理
cd /opt/mypro
echo '<h1>this is my web</h1>' > index.html
git add .
git commit -m "init"

# 给当前提交打标签 1.0
git tag 1.0
# 查看所有的tag
git tag
# 1.0

# 继续修改并提交
echo '<h2>hello world</h2>' >> index.html
git status -s
# M index.html
git add .
git commit -m "modify index"# 再打标签 2.0
git tag 2.0
git tag
# 1.0
# 2.0

用途:为重要版本(如发布版本)加里程碑标记,便于回溯与发布。
六、分支(Branch)管理
git 中默认有一个名为 master 的主分支,还可以创建自定义的分支。
6.1 查看与创建分支
git branch # 查看分支
# * master# 创建分支 b1(创建前确保工作区干净)
git status
git branch b1
git branch
# b1
# * master

6.2 切换分支并提交改动
# 切换分支到b1
git checkout b1
git branch

# 现在在 b1
cp /etc/passwd ./
git add .
git commit -m "add passwd"
ls
# index.html passwd

6.3 回到主分支并合并
git checkout master
ls
# index.html# 将 b1 合并到 master,同时直接添加合并时的注释信息。
git merge b1 -m "merge b1 to master"
# Fast-forward 时 -m 会被忽略(无合并提交产生)
ls
# index.html passwd

合并类型小结:
1、快进合并(Fast-Forward):如果当前分支完全落后于 b1,Git 会直接将当前分支移动到 b1 的最新提交点,不会创建新的合并提交。
2、非快进合并(Non-Fast-Forward):如果当前分支和 b1 分支有分叉历史,Git 会创建一个新的合并提交,提交信息会记录合并时的状态。
6.4 删除分支
git branch -d b1
git branch
# * master

6.5 使用 .gitignore 忽略无需纳入版本库的文件
echo abc123 > abc123.txt
mkdir mytest
cp /etc/hosts mytest/
git status
# 未跟踪:abc123.txt、mytest/

# 编写忽略规则
vim .gitignore
# 建议内容:
.gitignore # 忽略 .gitignore 自身(若确有此需)
*.swp # 忽略 Vim 的 .swp 临时文件
abc123.txt
mytest/*git status
# 无文件要提交,干净的工作区

实战建议:将 IDE 生成文件、编译产物、临时文件、日志等加入忽略规则,保持仓库整洁。
总结
1、为什么选 Git:分布式、离线可用、分支轻量高效、历史完整,适合现代协作与大型项目。
2、装与配:安装后务必配置全局 user.name/user.email 与默认编辑器,git config --list 检查生效。
3、三大区域心法:桌面(工作区)→ 待提交清单(暂存区)→ 文件柜(版本库);add 决定“本次提交范围”。
4、日常高频命令:git status/-s、git add、git commit、git rm、git log、git checkout。
5、版本里程碑:用 git tag 给关键提交打标记,便于回溯与发布。
6、协作核心:分支创建/切换/合并清晰流畅;善用 .gitignore 保持仓库整洁。
到这里,你已经具备 Git 的基本操作能力。建议在真实项目中多练 分支工作流 + 提交原子化(一次提交只做一件事、信息清晰),能让协作与回滚都更顺畅。祝使用顺利!
