智能
助手
最大化  清空记录 停止  历史记录
翻译选中文本
选中一段文本后进行翻译
名词解释
选中一段文本后进行名词解释
知识图谱生成
通过图谱展示知识信息
登录用户在知识浏览页面可用
答案生成
AI自动回答一个问答功能中的问题
登录用户在问答浏览页面,且问题开放回答中可用
知识摘要
自动为当前知识生成摘要
知识浏览页面可用
知识问答
针对当前知识进行智能问答
知识浏览面可用
   31  
查询码: 00000173
3. Git版本控制系统
作者: 文艺范儿 于 2025年11月17日 发布在分类 / DevOps / git ,于 2025年11月17日 编辑
DevOps git 版本控制

3. Git版本控制系统

3.1 版本控制系统简介

版本控制系统是一种软件工具,它帮助开发团队记录和管理文件(通常是源代码)的变更历史。你可以把它理解成一个“超级撤销”或“文件时光机”。

核心要解决的问题是:

  • 备份与恢复: 可以回溯到任何一个历史版本,再也不用担心改错代码后无法挽回。
  • 协同合作: 允许多人在同一个项目上工作而不会互相覆盖对方的修改。
  • 历史追踪: 记录每一次修改是谁、在什么时间、为什么做出的(通过提交信息),便于追查问题。
  • 分支管理: 可以创建独立的开发线(分支),在不影响主线(主分支)的情况下开发新功能或修复bug,完成后可以合并回主线。

3.2 为什么版本控制系统至关重要

在 DevOps 和现代软件开发中,版本控制系统是一切自动化流程的基石。没有它,以下实践都无法实现:

  1. 持续集成: CI 工具(如 Jenkins、GitLab CI)需要从版本库中拉取最新的代码进行构建和测试。
  2. 协作开发: 它是团队协作的唯一可信数据源。
  3. 代码审查: 通过发起合并请求或拉取请求,便于团队成员对代码变更进行评审。
  4. 基础设施即代码: 不仅是应用代码,服务器配置、部署脚本等也纳入版本控制,实现环境的一致性。

3.3 版本控制系统的发展与分类

版本控制系统主要经历了三个发展阶段:

1. 本地版本控制系统

代表工具:RCS(Revision Control System)

  • 工作原理: 在本地计算机上维护文件的版本历史。通过记录每个版本的补丁来节省空间。
  • 缺点: 无法实现团队协作,所有版本信息仅存在于单台机器上,风险高。

2. 集中式版本控制系统

代表工具:SVN(Subversion)、CVS(Concurrent Versions System)

  • 工作原理: 存在一个中央服务器,保存所有文件的版本历史。开发者从服务器签出代码,修改后提交回服务器。

  • 工作流程:

  • 优点: 管理简单,权限控制集中。

  • 缺点:

    • 单点故障: 中央服务器宕机,则所有人都无法提交代码或协同工作。
    • 单点风险: 如果服务器磁盘损坏且没有备份,整个项目的历史记录将丢失(当然,这是管理失误)。

3. 分布式版本控制系统(现代主流)

代表工具:Git、Mercurial

  • 工作原理: 每个开发者都拥有一个完整的版本库镜像,包括完整的历史记录。因此,你可以在本地提交、创建分支,然后在有网络时再与远程仓库(如 GitHub、GitLab)进行同步。

  • 工作流程:

  • 优点:

    • 强大离线工作: 可以在本地进行提交、查看历史等几乎所有操作。
    • 高性能: 因为操作大多在本地,速度极快。
    • 可靠性强: 每个开发者的机器都是一个完整的备份,极大地降低了数据丢失的风险。
    • 灵活的工作流: 非常适合特性分支工作流、GitFlow 等现代协作模式。
  • 缺点: 学习曲线相对陡峭。

3.4 主流工具:Git

今天,Git 是绝对的主流和事实上的标准。由 Linus Torvalds 为管理 Linux 内核开发而创建。

Git 的核心概念:

  • 仓库(Repository): 一个被 Git 管理的项目文件夹。

  • 工作区、暂存区、仓库:

    • 工作区: 你电脑上能看到的项目文件。
    • 暂存区: 一个中间区域,临时存放你打算下次提交的变更。
    • 仓库: 存放所有提交历史的地方。
  • 提交(Commit): 将暂存区的变更永久保存到本地仓库,形成一个版本记录。每次提交都有一个唯一的哈希值 ID。

  • 分支(Branch): 指向某个提交的可变指针。默认的主分支通常叫 mainmaster。创建新分支意味着从主线分叉出去独立开发。

  • 合并(Merge)变基(Rebase): 将分支上的工作整合回主分支的两种不同方法。

  • 远程仓库(Remote): 托管在网络上的仓库,用于团队协作(如 GitHub、GitLab、Gitee)。

3.4.1 安装部署

#yum安装
[root@200-gitlab ~]# yum -y install git
#用法
[root@200-gitlab ~]# git config
用法:git config [选项]

配置文件位置
    --global              使用全局配置文件
    --system              使用系统级配置文件
    --local               使用版本库级配置文件
    -f, --file <文件>     使用指定的配置文件
    --blob <blob-id>      read config from given blob object

操作
    --get                 获取值:name [value-regex]
    --get-all             获得所有的值:key [value-regex]
    --get-regexp          根据正则表达式获得值:name-regex [value-regex]
    --replace-all         替换所有匹配的变量:name value [value_regex]
    --add                 添加一个新的变量:name value
    --unset               删除一个变量:name [value-regex]
    --unset-all           删除所有匹配项:name [value-regex]
    --rename-section      重命名小节:old-name new-name
    --remove-section      删除一个小节:name
    -l, --list            列出所有
    -e, --edit            打开一个编辑器
    --get-color <slot>    找到配置的颜色:[默认]
    --get-colorbool <slot>
                          找到颜色设置:[stdout-is-tty]

类型
    --bool                值是 "true" 或 "false"
    --int                 值是十进制数
    --bool-or-int         值是 --bool or --int
    --path                值是一个路径(文件或目录名)

其它
    -z, --null            终止值是NUL字节
    --includes            查询时参照 include 指令递归查找
#配置git使用用户
[root@200-gitlab ~]# git config --global user.name "admin"
#配置git使用邮箱
[root@200-gitlab ~]# git config --global user.email "admin@mail.com"
#语法高亮
[root@200-gitlab ~]# git config --global color.ui true
#列出当前所有配置
[root@200-gitlab ~]# git config --list
user.name=admin
user.email=admin@mail.com
color.ui=true
[root@200-gitlab ~]# cat .gitconfig 
[user]
	name = admin
	email = admin@mail.com
[color]
	ui = true

3.4.2 Git初始化

初始化工作目录、对已存在的目录进行初始化

[root@200-gitlab ~]# mkdir git_data
[root@200-gitlab ~]# cd git_data/
#初始化
[root@200-gitlab git_data]# git init
初始化空的 Git 版本库于 /root/git_data/.git/
#查看工作区状态
[root@200-gitlab git_data]# git status
# 位于分支 master
#
# 初始提交
#
无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)
[root@200-gitlab git_data]# cd .git/
[root@200-gitlab .git]# ll -a
总用量 12
drwxr-xr-x 7 root root 119 11月 15 18:31 .
drwxr-xr-x 3 root root  18 11月 15 18:26 ..
drwxr-xr-x 2 root root   6 11月 15 18:26 branches #分支目录
-rw-r--r-- 1 root root  92 11月 15 18:26 config  #定义项目特有的配置选项
-rw-r--r-- 1 root root  73 11月 15 18:26 description #仅供git web程序使用
-rw-r--r-- 1 root root  23 11月 15 18:26 HEAD  #指示当前的分支
drwxr-xr-x 2 root root 242 11月 15 18:26 hooks  #包含git钩子文件
drwxr-xr-x 2 root root  21 11月 15 18:26 info  #包含一个全局排除文件(exclude)
drwxr-xr-x 4 root root  30 11月 15 18:26 objects  #存放所有数据内容。有info和pack两个子文件夹
drwxr-xr-x 4 root root  31 11月 15 18:26 refs  #存放指向数据(分支)的提交对象的指针

3.4.3 Git常规使用

1. 初始化和克隆仓库

命令 说明 示例
git init 在当前目录初始化一个新的 Git 仓库 git init
git clone <repo_url> 克隆(下载)一个远程仓库到本地 git clone https://github.com/user/repo.git

2. 基础工作流(最常用)

这三个命令构成了最基本的 Git 工作流:

命令 说明 示例
git add 将文件的修改添加到暂存区 git add main.py(添加特定文件)
    git add .(添加所有修改)
git commit -m "message" 将暂存区的内容提交到本地仓库,创建一个版本记录 git commit -m "修复了登录BUG"
git status 查看工作区和暂存区的状态(哪些文件被修改了、哪些已暂存) git status

记忆技巧: 工作区 -> add -> 暂存区 -> commit -> 本地仓库


3. 查看信息和历史

命令 说明 示例
git lo 查看提交历史 git log
    git log --oneline(简洁模式)
    git log -p(显示具体内容差异)
git diff 查看工作区暂存区的差异 git diff
  查看工作区最新提交的差异 git diff HEAD
  查看暂存区最新提交的差异 git diff --staged
git show <commit_id> 显示某次提交的详细信息 git show a1b2c3d
git blame 查看指定文件的每一行最后是谁修改的 git blame README.md

4. 分支管理

命令 说明 示例
git branch 查看所有本地分支 git branch
git branch <branch_name 创建一个新分支 git branch feature-login
git checkout <branch_name> 切换到指定分支 git checkout feature-login
git switch <branch_name> (Git 2.23+) 切换到指定分支(更安全) git switch main
git checkout -b <branch_name> 创建并切换到新分支(经典组合) git checkout -b hotfix-1
git switch -c <branch_name> (Git 2.23+) 创建并切换到新分支 git switch -c hotfix-1
git merge <branch_name> 将指定分支合并到当前分支 git switch main git merge feature-login
git branch -d <branch_name> 删除已合并的分支 git branch -d feature-login
git branch -D <branch_name> 强制删除分支,即使它未合并 git branch -D experiment

5. 远程仓库操作

命令 说明 示例
git remote -v 查看关联的远程仓库地址 git remote -v
git remote add 添加一个远程仓库地址并起别名 git remote add origin https://gitee.com/user/repo.git
git fetch 从远程仓库拉取最新信息到本地,但不自动合并 git fetch origin
git pull 拉取远程分支并自动合并到当前分支(=fetch+merge git pull origin main
git push 推送本地分支到远程仓库 git push origin main
  首次推送并设置上游跟踪分支 git push -u origin main
git push --delete 删除远程分支 git push origin --delete old-branch

6. 撤销和回退

(操作前请谨慎,确认已提交的代码不会丢失!)

命令 说明 适用场景
git restore 丢弃工作区的修改,恢复到最近一次 git add 或 git commit 的状态 文件改乱了,想重新开始
git restore --staged 将文件从暂存区撤回到工作区(取消 git add) 不小心把不该提交的文件 add 了
git reset --soft <commit_id> 回退到某个提交,但保留工作区和暂存区的修改 回退版本,但想重新组织提交信息
git reset --mixed <commit_id> (默认) 回退到某个提交,保留工作区,但清空暂存区 回退版本,想重新检查代码再提交
git reset --hard <commit_id> 彻底回退到某个提交,丢弃工作区和暂存区的所有修改 彻底放弃最近几次提交的代码
git revert <commit_id> 创建一个新的提交来撤销某次提交的更改(更安全,推荐用于公共分支) 撤销已经推送到远程仓库的提交

7. 储藏临时工作

命令 说明 示例
git stash 将当前工作区的修改临时储藏起来 git stash
git stash list 查看所有的储藏列表 git stash list
git stash pop 恢复最近一次储藏的修改,并删除储藏记录 git stash pop
git stash apply 恢复储藏的修改,但不删除储藏记录 git stash apply stash@{0}
git stash drop 删除一个储藏 git stash drop stash@{0}

使用场景: 当你正在一个分支上工作到一半,需要紧急切换到另一个分支修复 Bug 时,可以先 git stash 储藏当前工作,修复完后再 git stash pop 恢复。


8. 常用命令速查表

# 日常最高频组合
git status                    # 查看状态
git add .                     # 添加所有修改到暂存区
git commit -m "描述"          # 提交到本地仓库
git pull origin main          # 拉取远程最新代码(避免冲突)
git push origin main          # 推送到远程仓库

# 分支操作高频组合
git checkout -b new-feature   # 创建并切换到新分支
git switch -c new-feature     # (新版)创建并切换到新分支
... (在新分支上开发) ...
git switch main               # 切换回主分支
git merge new-feature         # 将新分支合并到主分支
git branch -d new-feature     # 删除已合并的本地分支

最佳实践建议:

  1. 提交前先 pull:推送前先拉取远程最新代码,减少冲突。
  2. 提交信息清晰:使用有意义的提交信息,便于日后回溯。
  3. 勤用分支:为新功能或修复创建独立分支,不要直接在主分支上开发。
  4. 理解后再撤销:在对 reset 和 revert 有充分理解前,谨慎使用。

 

笔记
0人参与


 历史版本

备注 修改日期 修改人
格式调整 2025-11-17 20:51:22[当前版本] 文艺范儿
内容更新 2025-11-17 20:47:15 文艺范儿
创建版本 2025-11-17 20:38:45 文艺范儿

  目录
    文艺知识分享平台 -V 5.2.5 -wcp