跳到主要内容
Ubuntu 22.04 中的版本控制系统 Git 实战 | 极客日志
Shell / Bash
Ubuntu 22.04 中的版本控制系统 Git 实战 Ubuntu 22.04 环境下 Git 版本控制系统的安装、配置及核心操作指南。涵盖分布式版本控制概念、仓库初始化与克隆、文件暂存与提交流程、分支管理与冲突解决、代码撤销与远程协作等实战步骤。通过具体命令示例演示工作区、暂存区与本地仓库的交互机制,提供 .gitignore 配置及常见误操作补救方案,帮助开发者掌握 Git 基础技能以提升团队协作效率。
极客零度 发布于 2026/3/20 更新于 2026/5/20 28 浏览Ubuntu 22.04 中的版本控制系统(Git 实战)
一、什么是版本控制
1. 核心概念
版本控制(Version Control)是一种追踪文件变更、记录修改历史、协作管理项目 的技术,核心作用是:
回溯历史:随时恢复到任意历史版本(如代码误删、引入 bug 后回滚);
多人协作:多开发者同时修改同一项目,自动合并代码,解决冲突;
追踪责任:记录每个修改的作者、时间、内容(便于问题定位);
并行开发:通过分支功能同时推进多个功能(如主线开发+bug 修复)。
2. 版本控制工具分类
类型 代表工具 核心特点 集中式 SVN、CVS 所有版本存储在中央服务器,本地仅存当前版本,依赖网络,单点故障风险高 分布式 Git、Mercurial 每个开发者本地都有完整仓库(包含所有历史版本),离线可开发,协作灵活高效
3. Git 的核心优势
分布式架构:不依赖中央服务器,本地可完成提交、分支等操作;
高效性能:压缩存储历史版本,分支切换、合并速度极快;
强大分支:支持轻量级分支,轻松实现并行开发与版本管理;
完整性保障:通过哈希值校验文件,防止数据篡改或丢失。
4. Git 核心术语
工作区(Working Directory) :本地编辑代码的文件夹(可见文件);
暂存区(Staging Area) :临时存储待提交的修改(.git/index 文件);
本地仓库(Local Repository) :存储所有版本历史(.git 隐藏文件夹);
远程仓库(Remote Repository) :远程服务器上的仓库(如 GitHub、GitLab);
提交(Commit) :将暂存区的修改保存到本地仓库,生成唯一版本号(哈希值);
分支(Branch) :独立的开发线路(默认 main 分支,原 master 已逐步淘汰);
合并(Merge) :将一个分支的修改整合到另一个分支。
二、安装及配置 Git(Ubuntu 22.04)
1. Git 安装(详细步骤)
Ubuntu 22.04 默认软件源包含 Git,通过 APT 安装即可,步骤如下:
sudo apt update
sudo apt install -y git
git --version
2. Git 基础配置(必须步骤)
Git 需要配置用户信息(用户名、邮箱),用于标识提交者身份,配置分为「全局配置」和「本地配置」:
全局配置:所有本地仓库共用(推荐优先配置);
本地配置:仅当前仓库生效(优先级高于全局配置)。
2.1 全局配置(常用) # 1. 配置全局用户名(替换为你的用户名,如 GitHub 用户名)
git config --global user.name "Your Name"
# 2. 配置全局邮箱(替换为你的邮箱,如 GitHub 注册邮箱)
git config --global user.email "[email protected] "
# 3. (可选)配置默认文本编辑器(解决冲突、编写提交信息时使用)
# 可选编辑器:vim、nano、code(VS Code)等,这里以 vim 为例
git config --global core.editor "vim"
# 4. (可选)配置中文显示(解决中文文件名乱码问题)
git config --global core.quotepath false
# 5. 验证配置是否生效(查看所有全局配置)
git config --global --list
# 输出示例:
# user.name=Your Name
# [email protected]
# core.editor=vim
# core.quotepath=false
2.2 本地配置(针对单个仓库) 如果某个仓库需要单独配置用户信息(如工作仓库用公司邮箱),进入仓库目录后执行:
cd ~/projects/my-project
git config user.name "Work Name"
git config user.email "[email protected] "
git config --list
2.3 配置文件位置
全局配置文件:~/.gitconfig(可直接编辑修改);
本地配置文件:仓库目录/.git/config(仓库内生效)。
三、建立项目仓库 Git 仓库分为「本地仓库」和「远程仓库」,核心流程:本地仓库可独立使用,也可关联远程仓库实现协作/备份。
1. 本地新建仓库(从零开始)
mkdir -p ~/projects/git-demo
cd ~/projects/git-demo
git init
git status
2. 克隆远程仓库(从远程导入) 适用于已有远程仓库(如 GitHub、GitLab 上的项目),通过 git clone 复制到本地:
git clone https://github.com/octocat/Hello-World.git ~/projects/hello-world
cd ~/projects/hello-world
git status
git remote -v
克隆私有仓库(需身份验证) 如果远程仓库是私有(如公司 GitLab 仓库),克隆时需输入用户名和密码,或配置 SSH 密钥(免密登录):
四、创建项目并导入源代码 新建仓库后,需将项目文件(源代码、配置文件等)导入仓库,核心步骤:工作区→暂存区→本地仓库。
1. 创建示例项目文件 #include <stdio.h>
int main () {
printf ("Hello Git! This is my first commit.\n" );
return 0 ;
}
这是一个用于演示 Git 版本控制的 C 语言项目。
核心功能:输出问候语,展示 Git 的提交、修改、冲突解决等操作。
2. 导入文件到本地仓库(三步曲) Git 导入文件需经过「添加到暂存区」和「提交到本地仓库」两个关键步骤:
步骤 1:查看文件状态(git status)
步骤 2:添加到暂存区(git add) 将需要跟踪的文件添加到暂存区(可单个文件、多个文件或所有文件):
# 方式 1:添加单个文件
git add hello.c
# 方式 2:添加多个文件(空格分隔)
git add hello.c README.md
# 方式 3:添加当前目录所有文件(常用,注意不要添加临时文件)
git add .
"." 代表当前目录
# 再次查看状态(验证添加成功)
git status
# 输出:
# Changes to be committed:(待提交文件:已在暂存区)
# new file: hello.c
# new file: README.md
步骤 3:提交到本地仓库(git commit) 将暂存区的文件永久保存到本地仓库,生成唯一版本记录,必须填写提交信息 (描述修改内容):
git commit -m"feat: 初始化项目,添加 hello.c 和 README.md"
步骤 4:查看提交历史(git log)
git log
git log --oneline
git log --graph --oneline
五、开始项目开发(核心操作) 项目导入仓库后,日常开发的核心流程:修改文件→查看变更→添加暂存→提交仓库→(可选)推送到远程。
1. 修改代码并提交(单文件修改)
步骤 1:修改工作区文件 修改 hello.c,增加新功能(输出版本信息):
#include <stdio.h>
int main () {
printf ("Hello Git! This is my first commit.\n" );
printf ("Project Version: v1.0.1\n" );
return 0 ;
}
步骤 2:查看文件变更(git diff) # 查看工作区与暂存区的差异(未 add 的修改)
git diff hello.c
# 输出示例(+表示新增,-表示删除):
# 4,5d3
# < // 新增功能:输出项目版本
# < printf ("Project Version: v1.0.1\n" );
# 7a6
# > return 0;
# 说明:如果已执行 git add,git diff 无法查看差异,需用 git diff --cached(查看暂存区与本地仓库的差异)
步骤 3:添加到暂存区并提交
git add hello.c
git commit -m"feat: 新增版本输出功能,版本号 v1.0.1"
git log --oneline
2. 多文件修改提交 如果同时修改了多个文件(如 hello.c 和 README.md),可批量提交:
vim README.md
git diff
git add .
git commit -m"docs: 更新 README.md,添加 v1.0.1 版本说明"
git log --oneline
3. 忽略不需要跟踪的文件(.gitignore) 项目中存在临时文件(如编译生成的 .o、可执行文件、日志文件等),无需 Git 跟踪,通过 .gitignore 文件配置:
步骤 1:创建.gitignore 文件
hello
a.out
*.o
*.log
*.tmp
.DS_Store
步骤 2:添加并提交.gitignore git add .gitignore
git commit - m"chore: 添加.gitignore,忽略编译文件和临时文件"
说明: .gitignore 仅对「未跟踪文件」生效,如果文件已被 Git 跟踪(已 add/commit),修改 .gitignore 无法忽略,需先移除跟踪:
六、解决冲突(多人协作核心) 冲突是多人协作中最常见的问题,当多个开发者修改同一文件的同一行代码 ,或同一分支的不同提交修改同一处 时,Git 无法自动合并,需手动解决。
1. 冲突产生场景(模拟多人协作) 假设两个开发者(A 和 B)同时基于 main 分支开发,流程如下:
开发者 A 的操作: # 1. 基于 main 分支创建新分支(模拟 A 的开发分支)
git checkout -b feature/A-dev
# -b 创建并切换分支
# 2. 修改 hello.c 的同一行(第 4 行)
vim hello.c
# 修改内容:printf("Hello Git! This is A's modification.\n");
# 3. 提交修改
git add hello.c
git commit -m"feat: A 修改问候语"
# 4. 切换回 main 分支,准备合并
git checkout main
开发者 B 的操作(模拟另一人修改): # 1 . 基于 main 分支创建新分支(模拟 B 的开发分支)
git checkout -b feature /B -dev
# 2 . 修改 hello .c 的同一行(第 4 行,与 A 冲突)
vim hello .c
# 修改内容:printf ("Hello Git! This is B's modification.\n" );
# 3 . 提交修改
git add hello .c
git commit -m "feat : B 修改问候语"
# 4 . 切换回 main 分支,准备合并
git checkout main
合并分支触发冲突:
git merge feature/A-dev
git merge feature/B-dev
2. 解决冲突的步骤
步骤 1:查看冲突状态
步骤 2:编辑冲突文件(核心) 打开冲突文件 hello.c,Git 会用特殊标记标注冲突位置:
#include <stdio.h>
int main () {
<<<<<<< HEAD
printf ("Hello Git! This is A's modification.\n" );
=======
printf ("Hello Git! This is B's modification.\n" );
>>>>>>> feature/B-dev
printf ("Project Version: v1.0.1\n" );
return 0 ;
}
步骤 3:手动解决冲突 删除冲突标记(<<<<<<<、=======、>>>>>>>),修改为最终需要的内容(如协商后保留两者的修改,或选择其一):
#include <stdio.h>
int main () {
printf ("Hello Git! This is A's modification.\n" );
printf ("Hello Git! This is B's modification.\n" );
printf ("Project Version: v1.0.1\n" );
return 0 ;
}
步骤 4:提交解决后的代码
git add hello.c
git commit
git log --oneline --graph
3. 冲突预防技巧
频繁同步:多人协作时,每天开发前拉取(git pull)远程分支最新代码;
细分功能:每个分支只开发一个小功能,减少同一文件的修改频率;
及时提交:完成一个功能就提交,避免大量代码堆积后合并;
沟通协调:避免多人同时修改同一文件的同一部分(提前沟通分工)。
七、撤销修改(误操作补救) 开发中难免出现误修改、误提交,Git 提供多种撤销方案,需根据「修改所处阶段」选择对应命令。
场景 1:工作区修改(未执行 git add) 误修改了文件,但还没添加到暂存区,想放弃修改,恢复到最近一次提交的状态:
git status
git checkout -- hello.c
git checkout -- .
git status
场景 2:暂存区修改(已 git add,未 git commit) 已执行 git add 将修改添加到暂存区,但想撤销暂存,恢复到工作区未 add 的状态:
git status
git reset HEAD hello.c
git status
git checkout -- hello.c
场景 3:本地仓库提交(已 git commit,未推送到远程) 已提交到本地仓库,但发现提交错误(如提交信息写错、漏改代码),想撤销该提交:
方式 1:修正最近一次提交(推荐,不删除历史) 如果只是提交信息错误,或漏加文件,可修正最近一次提交:
git add 漏加的文件
git commit --amend
git log --oneline
方式 2:回滚到指定版本(删除提交历史,谨慎使用) 如果提交的代码有严重 bug,想彻底删除该提交,回滚到之前的版本:
git log --oneline
git reset --hard 7a3f2d1
git log --oneline
场景 4:已推送到远程仓库(git push 后) 如果错误提交已推送到远程仓库(如 GitHub),切勿使用 git reset (会导致多人协作冲突),应使用 git revert 创建新提交,撤销旧提交的修改:
git log --oneline
git revert 9b2d5c7
git push origin main
撤销操作总结表 场景 推荐命令 风险等级 工作区修改(未 add) git checkout -- <文件> 低 暂存区修改(已 add 未 commit) git reset HEAD <文件> + git checkout -- <文件> 低 本地提交(未 push)- 修正信息 git commit --amend 中 本地提交(未 push)- 删除提交 git reset --hard <版本号> 高 远程提交(已 push) git revert <版本号> + git push 低
八、Git 命令汇总(分类整理)
1. 配置类 命令 功能描述 git config --global user.name '姓名' 配置全局用户名 git config --global user.email '邮箱' 配置全局邮箱 git config --global core.editor 'vim' 配置默认编辑器 git config --global --list 查看全局配置 git config --list 查看当前仓库配置(全局 + 本地)
2. 仓库操作类 命令 功能描述 git init 初始化本地仓库 git clone <远程 URL> [本地目录] 克隆远程仓库到本地 git remote -v 查看远程仓库关联(origin 是默认别名) git remote add <别名> <远程 URL> 添加远程仓库关联(如 git remote add origin) git remote remove <别名> 删除远程仓库关联
3. 提交相关类 命令 功能描述 git status 查看工作区、暂存区状态 git diff [<文件>] 查看工作区与暂存区的差异 git diff --cached [<文件>] 查看暂存区与本地仓库的差异 git add <文件> / git add . 添加文件到暂存区 git commit -m '提交信息' 提交暂存区到本地仓库 git commit --amend 修正最近一次提交 git log 查看提交历史(完整) git log --oneline 简洁查看提交历史(版本号 + 信息) git log --graph --oneline 图形化查看提交历史(分支合并清晰)
4. 分支操作类 命令 功能描述 git branch 查看所有本地分支(*表示当前分支) git branch <分支名> 创建新分支 git checkout <分支名> 切换分支 git checkout -b <分支名> 创建并切换分支 git merge <分支名> 合并指定分支到当前分支 git branch -d <分支名> 删除已合并的分支 git branch -D <分支名> 强制删除未合并的分支
5. 冲突解决类 命令 功能描述 git status 查看冲突文件 git add <冲突文件> 解决冲突后添加到暂存区 git commit 提交冲突解决结果
6. 撤销修改类 命令 功能描述 git checkout -- <文件> 撤销工作区修改(未 add) git reset HEAD <文件> 撤销暂存区修改(已 add 未 commit) git reset --hard <版本号> 回滚到指定版本(本地未 push) git revert <版本号> 撤销指定提交(已 push 到远程)
7. 远程协作类 命令 功能描述 git pull <远程别名> <分支名> 拉取远程分支最新代码并合并(如 git pull origin main) git push <远程别名> <分支名> 推送本地分支到远程仓库(如 git push origin main) git push -u <远程别名> <分支名> 推送并关联远程分支(后续可直接 git push)
九、本章小结 本章详细讲解了 Ubuntu 22.04 中 Git 版本控制系统的核心知识点与实战操作,核心要点总结如下:
基础认知 :Git 是分布式版本控制工具,核心优势是本地仓库完整、分支灵活、协作高效,核心流程是「工作区→暂存区→本地仓库→远程仓库」;
环境配置 :通过 APT 快速安装 Git,必须配置用户名和邮箱(标识提交者),可根据需求配置全局或本地参数;
仓库操作 :支持本地新建仓库(git init)和克隆远程仓库(git clone),.git 文件夹是仓库核心,切勿手动修改;
日常开发 :修改文件后通过 git add 添加到暂存区,git commit 提交到本地仓库,git log 查看历史,git diff 查看变更;
冲突解决 :多人协作时冲突不可避免,需通过编辑冲突文件(删除冲突标记、协商内容)→git add→git commit 完成解决,预防冲突的关键是频繁同步和细分功能;
撤销修改 :根据修改所处阶段(工作区、暂存区、本地仓库、远程仓库)选择对应命令,已推送远程的修改优先使用 git revert(安全无风险);
核心命令 :掌握配置、提交、分支、冲突解决、撤销修改的核心命令,可满足日常开发和协作需求。
Git 是程序员必备工具,建议在实际项目中多练习(如搭建个人 GitHub 仓库、模拟多人协作),熟练掌握后可大幅提升开发效率和代码管理能力。实际工作中,结合远程仓库(GitHub、GitLab)可实现跨团队协作、代码备份和版本管理,是大型项目开发的基础。
相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online