一、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] 文件中添加3
1 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 搭建私有仓库。
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
清华大学镜像站
① 安装依赖
[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 clone
、git 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