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

【Day 44】Shell-Git版本控制器

一、Git 版本控制工具概述

1、作用与工具

Git 是一款分布式版本控制系统,核心作用是记录文本文件(如代码、文档等)的版本变化,支持随时回退到历史版本,便于多人协作开发和追踪修改记录。

常见的版本控制工具包括:

  • Git:分布式版本控制,性能优异,支持离线操作,适合大型项目和多人协作。

  • SVN:集中式版本控制,依赖中央服务器,操作简单,适合小型项目。

2、Git 安装与初始化设置

(1)安装 Git

  • yum install -y git  # 安装 Git
  • rpm -q git  # 验证安装结果

(2)初始化配置

安装后需设置用户信息(用于记录提交者身份),并开启颜色显示(提升交互体验):

  • # git config --global user.name "Angelina"  # 设置用户名
  • # git config --global user.email "Angelina@qq.com"  # 设置邮箱
  • # git config --global color.ui true  # 开启颜色显示

// 注:--global 表示全局配置,对当前用户所有仓库生效;省略 --global,仅对单个仓库生效。

二、Git 核心操作

1. 创建 Git 仓库

一个 Git 仓库对应一个项目,初始化仓库后会生成 .git 目录(存储版本信息,勿手动修改)

  • # mkdir /opt/gitlearn  # 创建项目目录
  • # cd /opt/gitlearn  # 进入目录
  • # git init  # 初始化仓库
  • 输出:Initialized empty Git repository in /opt/gitlearn/.git/  
  • 或输出:初始化空的 Git 版本库于 /opt/gitlearn/.git/
  • # ls -a  # 查看隐藏的 .git 目录

2. 提交文件修改

  • touch 文件名    //建立一个文件

Git 提交修改需经过「工作区 → 暂存区 → 本地仓库」三步,核心命令如下:

  • git add <文件>       // 将工作区的修改添加到暂存区(暂存区用于临时存放待提交的修改)。

// 快捷操作:git add . 可添加当前目录所有修改。

  • git commit -m "说明信息"      //将暂存区的修改提交到本地仓库(需填写说明信息)。

// 快捷操作:git commit -a -m "说明" 可直接提交已跟踪文件的修改(跳过 git add)。
 

3. 查看仓库状态

  • git status       // 查看工作区、暂存区与本地仓库的差异,示例如下:
# 未添加到暂存区的修改
[root@localhost gitlearn]# git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   file01
#
no changes added to commit (use "git add" and/or "git commit -a")# 添加到暂存区后
[root@localhost gitlearn]# git add file01
[root@localhost gitlearn]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   file01
## 提交到本地仓库后
[root@localhost gitlearn]# git commit -m "文件中添加3"
[master 6545b5c] 文件中添加31 file changed, 1 insertion(+)
[root@localhost gitlearn]# git status
# On branch master
nothing to commit, working directory clean

4. 版本回退

若需回退到历史版本,步骤如下:

  • git reflog     //查看所有版本的操作记录(含版本 ID,即 commit 哈希值)。

补充:git log 可查看详细提交历史(不含已删除的版本记录),git reflog 更适合找回历史版本。

  • git reset --hard <版本ID>      // 回退到指定版本(--hard 表示强制覆盖工作区和暂存区)。
[root@localhost gitlearn]# git reflog  # 查看版本记录
c2fec1a HEAD@{0}: commit: 文件中添加4
6545b5c HEAD@{1}: commit: 文件中添加3
b3d23b4 HEAD@{2}: reset: moving to b3d23b4[root@localhost gitlearn]# git reset --hard 6545b5c  # 回退到"文件中添加3"版本
HEAD is now at 6545b5c 文件中添加3

5. 撤销修改

根据修改所处的阶段(工作区、暂存区、本地仓库),撤销方式不同:

(1)核心概念

  • 工作区:本地可见的文件目录(正在编辑的文件)。

  • 暂存区:临时存放待提交的修改(git add 后进入)。

  • 本地仓库:存储已提交的历史版本(git commit 后进入)。

(2)撤销工作区的修改

  • git checkout -- file01    // 丢弃 file01 在工作区的修改

注:checkout -- <文件> 会用暂存区或本地仓库的版本覆盖工作区,修改后无法恢复,需谨慎。

(3) 撤销暂存区的修改

需先将修改从暂存区退回工作区,再撤销工作区修改:

[root@localhost gitlearn]# git reset HEAD file01  # 暂存区 → 工作区
Unstaged changes after reset:
M	file01
[root@localhost gitlearn]# git checkout -- file01  # 撤销工作区修改

(4)撤销本地仓库的修改

通过版本回退实现(同「4. 版本回退」步骤)。

三、Git 分支管理

分支:用于隔离不同开发任务(如功能开发、bug 修复),默认分支为 master(或 main)

1. 查看分支

  • git branch  # 列出所有分支,当前分支前带 *

2. 创建分支

  • git branch release-v1.1  # 创建 release-v1.1 分支

快捷操作:git checkout -b dev 或 git switch -c dev(Git 2.23+ 推荐),可创建并直接切换到 dev 分支。

3. 切换分支

  • git checkout release-v1.1  # 切换到 release-v1.1 分支
  • git switch release-v1.1    # 推荐用法(Git 2.23+)

4. 合并分支

将指定分支的修改合并到当前分支(需先切换到目标分支):

  • # git switch master      // 切换到 master 分支
  • # git merge release-v1.1     // 合并 release-v1.1 到 master

冲突解决

  • 若合并时两个分支修改了同一文件的同一部分,会产生冲突,需手动解决:
  • 冲突文件会标记冲突内容(<<<<<<< HEAD 到 ======= 为当前分支内容,======= 到 >>>>>>> 分支名 为待合并分支内容)。
  • 编辑文件,保留正确内容并删除冲突标记。
  • 执行 git add <冲突文件> 和 git commit -m "解决冲突" 完成合并。

        

5. 删除分支

  • # git branch -d dev  # 安全删除(需合并后,否则报错)
  • # git branch -D dev  # 强制删除(未合并也可删除,谨慎使用)

四、Git 远程仓库

远程仓库用于多人协作共享代码,常见平台有 GitHub(国外)、Gitee(国内),也可通过 GitLab 搭建私有仓库。

Gitee - 基于 Git 的代码托管和研发协作平台

1、公共仓库(GitHub/Gitee)

(1)克隆远程仓库到本地

  • # git clone https://gitee.com/xxx/xxx.git     // 克隆仓库(HTTPS 地址)
    • # git clone git@gitee.com:xxx/xxx.git   // 或使用 SSH 地址(配置 SSH 密钥)

        

 Gitee 上的 项目仓库完整下载到本地,生成一个同名文件夹。

该文件夹中包含的内容是该 项目的全部源代码及相关资源

(2)推送本地修改到远程仓库

     ① 首次推送需关联远程仓库(若克隆仓库则已关联,可跳过):

  • [root@localhost gitlearn]# git remote add origin https://gitee.com/xxx/xxx.git

     ② 推送修改:

  • [root@localhost gitlearn]# git push -u origin master    // 首次推送,-u 关联远程分支
  • [root@localhost gitlearn]# git push      // 后续推送可省略参数

          

     ③ 拉取远程更新到本地

  • [root@localhost gitlearn]# git pull origin master  // 拉取远程 master 分支更新

2、私有仓库(GitLab 部署)

GitLab-ee

GitLab-ce

清华大学镜像站

清华大学 TUNA 镜像站

① 安装依赖

[root@gitlab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix
[root@gitlab ~]# systemctl enable --now postfix  # 启动邮件服务(GitLab 需发送通知)
[root@gitlab ~]# firewall-cmd --add-service=http --permanent  # 开放 HTTP 端口
[root@gitlab ~]# firewall-cmd --reload

② 安装 GitLab

# 下载指定版本的 GitLab 包(以 10.1.5 为例)
[root@gitlab ~]# wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.1.5-ce.0.el7.x86_64.rpm/download.rpm -O gitlab-ce-10.1.5.rpm
# 安装
[root@gitlab ~]# rpm -ivh gitlab-ce-10.1.5.rpm

③ 配置与启动

  • netstat -tunlp    //确保80/443端口没被占用
  • # vim /etc/gitlab/gitlab.rb  // 编辑配置文件
  • external_url 'http://gitlab.linux.com'    //设置访问地址(需解析域名或绑定 hosts)
  • # gitlab-ctl reconfigure   // 初始化配置(耗时较长)
  • # gitlab-ctl start   // 启动服务

④ 首次访问

  • 访问配置的地址(如 http://gitlab.linux.com),首次登录需修改 root 密码。

        

  • 创建项目后,即可通过 git clonegit push 等命令与本地仓库同步。

               

// 创建新项目

        

//复制链接

  • # git clone http://gitlab.linux.com/root/hello.git
  • # vim /etc/hosts
  • # ping gitlab.linux.com
  • # cd /git
  • #  git clone http://gitlab.linux.com/root/hello.git

http://www.xdnf.cn/news/1460557.html

相关文章:

  • 【Python】数据可视化之分类图
  • Day2p2 夏暮客的Python之路
  • 数学建模25c
  • [数据结构] 链表
  • 深度学习之第七课卷积神经网络 (CNN)调整学习率
  • MySQL子查询的分类讲解与实战
  • 从基础到实践:Web核心概念与Nginx入门全解析
  • 前端url参数拼接和提取
  • 嵌入式基础 -- I²C 信号与位层规则
  • Swift 解法详解:LeetCode 371《两整数之和》
  • 漏洞绕过方式
  • 从零到一:人工智能应用技术完全学习指南与未来展望
  • ClickHouse 分片、 Distributed 表、副本机制
  • flowable基础入门
  • 【c/c++】深度DFS
  • MATLAB平台实现人口预测和GDP预测
  • 美国教授提出的布鲁姆法,结合AI直击学术科研痛点,写作与创新效率直接翻倍!
  • 漫谈《数字图像处理》之实时美颜技术
  • Java并行计算详解
  • 解决 Rollup failed to resolve import “vue3-json-viewer/dist/index.css“ from xxx
  • 【Docker】P1 前言:容器化技术发展之路
  • JS本地存储
  • Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
  • C++学习记录(6)string部分操作的模拟实现
  • push pop 和 present dismiss
  • Leetcode 206. 反转链表 迭代/递归
  • 拦截器和过滤器(理论+实操)
  • Websocket链接如何配置nginx转发规则?
  • NV169NV200美光固态闪存NV182NV184
  • 云数据库服务(参考自腾讯云计算工程师认证课程)更新中......