DevOps 入门系列:Git 版本控制

DevOps 入门系列:Git 版本控制 —— 从零开始掌握团队协作的基石

本部分目标

无需任何 Git 基础。学习完成后,你将理解版本控制、Git 核心模型,熟练掌握日常开发中 90% 的 Git 操作,能够独立使用分支、解决代码冲突、完成本地仓库与 GitHub 远程仓库的对接。


一、什么是版本控制?为什么程序员需要它?

1.1 没有版本控制的开发困境

假设独立开发网站项目:

  1. 今日完成登录功能,代码运行正常;

  2. 次日开始开发购物车功能,代码改动量大;

  3. 临时需求:回滚到昨日版本修复登录 Bug。

此时会陷入难题:新旧代码混杂,无法区分不同阶段的修改,只能手动删减代码,不仅耗时,还极易误删内容,导致项目运行异常。

核心问题:没有版本控制,就无法安全、快速地回退到项目任意历史状态。

1.2 版本控制系统(VCS)定义

版本控制系统(Version Control System,简称 VCS)是一款专门记录文件修改轨迹的工具,会为每一次改动生成完整历史记录。依托它可以实现:

  • 查看文件任意历史时间点的内容

  • 对比不同版本代码的差异

  • 撤销错误修改,快速回退版本

  • 追溯代码修改人、修改时间与具体改动行

通俗类比:版本控制系统等同于论文的「自动存档 + 无限撤销」功能,无需手动创建 最终版.docx最终版2.docx 这类冗余文件。

1.3 Git 成为主流的核心原因

Git 是目前行业通用的版本控制系统,绝大多数企业开发团队都在使用,核心优势如下:

  1. 分布式:每台开发者设备都存有完整代码仓库,脱离中央服务器也可查看历史、提交代码;

  2. 速度极快:绝大多数操作在本地完成,无需依赖网络;

  3. 分支轻量化:创建、合并分支开销极小,支持团队多人并行开发。


二、Git 的核心概念:工作区、暂存区、仓库

三大区域是 Git 的底层核心模型,熟练理解后才能灵活使用所有命令。

2.1 工作区(Working Directory)

  • 定义:电脑上直观可见的项目文件夹,日常新建、编辑、删除文件都在这个区域完成。

  • 类比:书桌,可自由书写、摆放文件。

2.2 暂存区(Staging Area)

  • 定义:临时存放代码修改的中转区域,需通过 git add 命令将工作区的改动移入暂存区,只有暂存区内容才会参与下一次提交

  • 存在意义:区分不同类型的修改,按需分批提交(例如先提交 Bug 修复代码,再提交新功能代码)。

  • 类比:超市购物车,先挑选商品放入购物车,最后统一结算。

2.3 仓库(Repository /.git 文件夹)

  • 定义:执行 git commit 后,暂存区的内容会被永久归档到本地仓库。仓库对应项目根目录下的隐藏文件夹 .git,项目所有历史版本、分支数据、提交记录全部存储于此。

  • 类比:档案馆,每一次提交都是一份带时间戳的存档文件,可随时调取查看。

2.4 完整数据流向

工作区  —(git add)—>  暂存区  —(git commit)—>  本地仓库  —(git push)—>  远程仓库(GitHub/GitLab/Gitee)
  • git add / git commit:纯本地操作,无需网络

  • git push / git pull:涉及远程仓库,必须联网


三、Git 安装与首次配置

3.1 多平台安装方式

Windows
  1. 官网下载安装包:https://git-scm.com/

  2. 全程默认选项下一步安装;

  3. 安装完成后打开 Git Bash,所有 Git 命令均在此终端执行。

macOS

方式 1(系统自带工具):终端输入 git --version,按提示安装命令行工具;
方式 2(Homebrew):

brew install git
Linux(Ubuntu/Debian)
sudo apt update && sudo apt install git

3.2 全局身份配置(必做)

每一次 Git 提交都会记录开发者信息,首次使用必须配置用户名和邮箱。

# 全局配置(当前系统所有 Git 仓库生效)
git config --global user.name "你的昵称/真实姓名"
git config --global user.email "你的邮箱@example.com"
  • 去掉 --global:仅对当前单个仓库生效;

  • 验证配置:

git config --list

执行后能看到 user.nameuser.email 即代表配置成功。


四、第一次使用 Git:初始化仓库与第一次提交

4.1 创建项目并初始化 Git 仓库

# 新建项目文件夹
mkdir my-first-git-project
# 进入项目目录
cd my-first-git-project
# 初始化空 Git 仓库
git init

输出 Initialized empty Git repository in ... 即为初始化成功,目录内生成隐藏文件夹 .git

4.2 新建文件 & 查看仓库状态

# 创建测试文件
echo "Hello, Git!" > hello.txt
# 查看文件追踪状态
git status

输出解读

On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hello.txt
nothing added to commit but untracked files present

Untracked files:文件为新增状态,Git 暂未追踪,需要执行 git add 加入暂存区。

4.3 将文件加入暂存区

# 指定单个文件加入暂存区
git add hello.txt

再次执行 git status,文件变为绿色,代表已进入暂存区,等待提交。

常用简写

  • git add .:将当前目录下所有新增 / 修改 / 删除的文件全部加入暂存区;

  • git add *.txt:仅将所有后缀为 .txt 的文件加入暂存区。

4.4 提交内容到本地仓库

git commit -m "第一次提交:添加 hello.txt"
  • -m:后跟提交描述信息,用于说明本次修改内容;

  • 规范要求:提交信息必须简洁易懂,禁止使用 updatefix123 等无意义内容。

优质提交信息示例

  • 修复登录按钮移动端点击失效问题

  • 新增用户注册接口

  • 优化数据库查询,提升接口响应速度

4.5 查看提交历史记录

# 查看完整提交日志
git log

# 精简版日志(单行展示,推荐日常使用)
git log --oneline

五、修改文件与再次提交

5.1 修改文件 &amp; 对比代码差异

编辑 hello.txt 新增内容,执行以下命令查看状态与改动:

# 查看仓库状态
git status
# 查看文件具体修改内容
git diff
  • 红色内容:删除的代码;

  • 绿色内容:新增的代码;

  • 该命令可在提交前核对修改内容,避免误提交。

5.2 重复提交流程

# 改动加入暂存区
git add hello.txt
# 提交到本地仓库
git commit -m "在 hello.txt 中增加第二行内容"

小贴士:初学者建议每次修改都显式执行 git add,不推荐直接使用 git commit -a


六、远程仓库:备份与团队协作

6.1 远程仓库作用

本地仓库仅保存在个人电脑,存在硬盘损坏丢失数据、多人无法协同开发的问题。
远程仓库是托管在公网服务器的 Git 仓库(主流平台:GitHub、GitLab、Gitee),核心用途:

  1. 云端备份代码;

  2. 团队多人共享、同步代码。

类比:本地仓库 = 本地笔记本,远程仓库 = 云端网盘。

6.2 GitHub 创建远程仓库

  1. 注册并登录 GitHub 账号;

  2. 点击右上角 +New repository

  3. 填写仓库名(建议和本地项目名一致);

  4. 不要勾选 Initialize this repository with a README(本地已有仓库);

  5. 点击 Create repository 完成创建。

6.3 关联本地仓库与远程仓库

执行命令关联远程地址(替换为你自己的仓库链接):

git remote add origin https://github.com/你的用户名/my-first-git-project.git
  • origin:远程仓库默认别名(行业通用规范);

  • 查看已配置的远程仓库:

git remote -v

6.4 推送本地代码到远程仓库

# 首次推送,建立上下游关联
git push -u origin main
  • -u:绑定分支关联,后续直接执行 git push 即可推送;

  • 认证说明:GitHub 已废弃账号密码登录,需使用 Personal access tokens 作为密码输入。

推送成功后,刷新 GitHub 页面,即可看到本地上传的文件。

6.5 克隆远程仓库

在其他设备 / 目录下载完整远程仓库(包含所有历史记录):

git clone https://github.com/你的用户名/my-first-git-project.git

七、分支:多人协作的核心能力

7.1 分支的作用

多人并行开发场景下,若所有人都在主分支 main 开发:

  • 未完成的半成品代码会影响其他成员;

  • 不同功能代码相互混杂,难以拆分维护。

分支解决方案:从主分支拆分独立开发线,每个人在专属分支开发,互不干扰;功能测试完成后,再合并回主分支。

类比:游戏存档副本,在副本中尝试新操作,成功则合并到主存档,失败则直接删除副本。

7.2 分支基础操作

# 1. 查看所有本地分支(* 代表当前所在分支)
git branch

# 2. 创建新分支(不切换)
git branch feature-shopping-cart

# 3. 切换到指定分支
git switch feature-shopping-cart

# 4. 创建分支 + 立即切换(常用简写)
git switch -c feature-shopping-cart

7.3 分支内提交 &amp; 分支合并

  1. 在新分支完成代码修改、git addgit commit

  2. 功能开发完成后,合并回主分支:

# 切换到主分支(接收代码的目标分支)
git switch main
# 合并指定分支到当前分支
git merge feature-shopping-cart
  • 快进合并(Fast-forward):主分支无新改动,直接移动分支指针,历史记录为直线;

  • 三方合并:主分支已有新提交,Git 会生成一条新的合并记录。

7.4 删除分支 &amp; 推送本地分支到远程

# 安全删除(分支已合并,推荐)
git branch -d feature-shopping-cart

# 强制删除(分支未合并,谨慎使用)
git branch -D feature-shopping-cart

# 将本地新分支推送到远程仓库
git push origin feature-shopping-cart

八、合并冲突:多人修改同一文件的解决方案

8.1 冲突产生条件

两个分支修改了同一个文件的同一行 / 相邻行,或一个分支删除文件、另一个分支修改该文件时,Git 无法自动判断最终内容,就会触发代码冲突

补充:仅修改不同文件、同一文件不同区域,Git 可自动合并,不会产生冲突。

8.2 冲突文件标记格式

冲突文件内会出现专属标记,格式如下:

<<<<<<< HEAD
# 当前分支(main)的代码内容
=======
# 待合并分支的代码内容
>>>>>>> 分支名
  • HEAD:指向当前所在分支;

  • =======:两个版本内容的分隔线。

8.3 手动解决冲突步骤

  1. 执行 git status 找到标红的冲突文件;

  2. 打开文件,删除所有冲突标记(&lt;&lt;&lt;&lt;&lt;&lt;、=======、&gt;&gt;&gt;&gt;&gt;&gt;&gt;),手动编辑保留最终代码;

  3. 将解决后的文件加入暂存区:

git add 冲突文件名
  1. 完成合并提交:
git commit -m "合并分支,解决代码冲突"
  1. 查看分支合并历史:
git log --oneline --graph

8.4 冲突规避技巧

  1. 开发期间频繁拉取主分支最新代码,提前化解小冲突;

  2. 团队分工明确,尽量避免多人同时修改同一文件的同一区域;

  3. 使用 Pull Request 流程,合并前完成代码评审。


九、SSH 认证:免密连接 GitHub

9.1 SSH 对比 HTTPS

  • HTTPS:每次推送代码都需要输入账号 / 令牌,操作繁琐,部分网络环境会被拦截;

  • SSH:配置密钥后免密认证,连接更稳定,是团队开发首选方式。

9.2 SSH 密钥原理

密钥分为一对:

  • 私钥:本地保存,等同于个人身份证,严禁外泄;

  • 公钥:上传到 GitHub,等同于身份证复印件,用于身份校验。

连接逻辑:GitHub 用公钥加密信息,本地设备用私钥解密,自动完成身份验证。

9.3 生成本地 SSH 密钥

ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"

参数说明:

  • -t rsa:使用 RSA 加密算法;

  • -b 4096:密钥长度 4096 位,安全性更高;

  • -C:备注信息,一般填写邮箱。

执行后连续回车(默认存储路径、不设置密钥密码),生成两个文件:

  • 私钥:~/.ssh/id_rsa

  • 公钥:~/.ssh/id_rsa.pub

9.4 公钥配置到 GitHub

  1. 查看并复制公钥全部内容:
cat ~/.ssh/id_rsa.pub
  1. GitHub 配置路径:头像 → SettingsSSH and GPG keysNew SSH key

  2. 粘贴公钥内容,保存即可。

9.5 测试 SSH 连接

ssh -T git@github.com

首次连接输入 yes

9.6 切换仓库远程地址为 SSH

# 查看当前远程地址
git remote -v
# 替换为 SSH 地址
git remote set-url origin git@github.com:你的用户名/仓库名.git

配置完成后,后续 git push / git pull 无需再输入密码。


十、Git 常用命令速查表(按场景分类)

操作场景对应命令
查看仓库当前状态git status
单个文件加入暂存区git add 文件名
所有改动加入暂存区git add .
提交代码(带描述)git commit -m "提交说明"
查看精简提交历史git log --oneline
查看所有本地分支git branch
切换分支git switch 分支名
创建并切换新分支git switch -c 分支名
合并分支先切目标分支 → git merge 源分支
安全删除分支git branch -d 分支名
强制删除分支git branch -D 分支名
查看远程仓库信息git remote -v
添加远程仓库关联git remote add origin 远程地址
首次推送代码到远程git push -u origin main
常规推送代码git push
克隆远程仓库git clone 远程地址
生成 SSH 密钥ssh-keygen -t rsa -b 4096 -C "邮箱"
测试 GitHub SSH 连接ssh -T git@github.com
拉取远程仓库最新代码git pull
撤销工作区文件修改(未 add) git checkout --文件名
撤销暂存区文件(已 add,未 commit)git reset HEAD 文件名
撤销上一次提交(保留代码)git reset --soft HEAD^
临时暂存未完成代码git stash
恢复暂存的代码git stash pop
查看详细提交历史(含文件改动)git log -p
删除远程仓库分支git push origin --delete 远程分支名
创建本地标签(版本号)git tag v1.0.0
推送标签到远程仓库git push origin v1.0.0
强制推送代码(慎用,覆盖远程)git push -f
同步远程分支信息(清理无效分支)git fetch --prune
查看当前提交的文件详情git show 提交ID
查看工作区 vs 暂存区的代码改动(未 add 的修改)git diff
查看暂存区 vs 本地仓库的改动(已 add、待 commit)git diff --cached
查看指定文件的改动git diff 文件名
查看两次提交之间的差异git diff 提交ID1 提交ID2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值