Git 介绍
Git(读音为 / gɪt/.) 是一个开源的分布式版本控制系统, 可以有效, 高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件.-- 摘自 360 百科
Git 是分布式版本控制系统, 那么它就没有中央服务器的, 每个人的电脑就是一个完整的版本库, 所以, 工作的时候就不需要联网了, 因为版本库都是在自己的电脑 上. 现在每个人的电脑都有一个完整的版本库, 那多个人如何协作呢? 比如说自己在电脑上改了文件 A, 其他人也在电脑上改了文件 A, 这时, 你们两之间只需把各自的修改推送给对方, 就可以互相看到对方的修改了.
主要有如下特点:
1. 版本控制
2. 分布式
3. 工作过程是将服务器上的代码下载到本地, 本地开发完成后, 在提交到服务器端
Git 相比于 SVN 功能更加的强大, 命令也很多. 本篇博客将详细介绍一些常用命令的使用操作.
Git 几个概念
一. 工作目录
工作目录是对项目的某个版本独立提取出来的内容. 这些从 Git 仓库的压缩数据库中提取出来的文件, 放在磁盘上供你使用或修改.
二. 暂存区域
是一个文件, 保存了下次将提交的文件列表信息, 一般在 Git 仓库目录中. 有时候也被称作 `'索引'', 不过一般说法还是叫暂存区域.
三. Git 仓库目录
是 Git 用来保存项目的元数据和对象数据库的地方. 这是 Git 中最重要的部分, 从其它计算机克隆仓库时, 拷贝的就是这里的数据.
Git 工作流程
基本的 Git 工作流程如下:
在工作目录中修改文件 > 暂存文件, 将文件的快照放入暂存区域 > 提交更新, 找到暂存区域的文件, 将快照永久性存储到 Git 仓库目录.
如果 Git 目录中保存着的特定版本文件, 就属于已提交状态. 如果作了修改并已放入暂存区域, 就属于已暂存状态. 如果自上次取出后, 作了修改但还没有放到暂存区域, 就是已修改状态.
Git 的安装
第一种安装方式: yum 进行安装
[root@ken ~]# yum install Git -y
第二种安装方式: 编译安装
第一步: 上传安装包并解压
- [root@ken ~]# rz
- [root@ken ~]# ls | grep Git
- Git-v2.7.4.zip
- [root@ken ~]# unzip Git-v2.7.4.zip
第二步: 安装依赖
[root@ken Git-2.7.4]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
第三步: 进入解压下目录下并执行编译
- [root@ken Git-2.7.4]# make prefix=/usr/local/Git all
- [root@ken Git-2.7.4]# make prefix=/usr/local/Git install
第四步: 导入二进制程序
- [root@ken Git-2.7.4]# rm -rf /usr/bin/Git
- [root@ken Git-2.7.4]# ln -s /usr/local/Git/bin/Git /usr/bin/Git
- [root@ken Git-2.7.4]# Git --version
- Git version 2.7.4
演示 1: 简单基础演示
第一步: 创建一个目录, 并进入
- [root@ken ~]# mkdir /kenken
- [root@ken ~]# cd /kenken
第二步: 初始化目录
[root@ken kenken]# Git init
第三步: 创建一个测试文件
[root@ken kenken]# echo "this is ken">>a.tt
第四步: 提交
- [root@ken kenken]# Git add a.tt
- [root@ken kenken]# Git commit -m "v1"
第五步: 查看
- [root@ken kenken]# Git log
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
第六步: 往测试文件里面追加数据
[root@ken kenken]# echo "new data">>a.tt
第七步: 提交
- [root@ken kenken]# Git add a.tt
- [root@ken kenken]# Git commit -m "v2"
第八步: 再次查看
- [root@ken kenken]# Git log
- commit d1f52146b390c95c614e8ae7acc922da0f7e2d0d
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:34:11 2018 +0800
- v2
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
第九步: 恢复到第 v1 版本
- [root@ken kenken]# Git reset --hard HEAD~1
- HEAD is now at 15370fe v1
- [root@ken kenken]# Git log
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
第十步: 恢复到 v2 版本
- [root@ken kenken]# Git reflog #首先使用 Git reflog 可以查看 commit 值
- 15370fe HEAD@{0}: reset: moving to HEAD~1
- d1f5214 HEAD@{1}: commit: v2
- 15370fe HEAD@{2}: reset: moving to HEAD~1
- 22d39cb HEAD@{3}: commit: v2
- 15370fe HEAD@{4}: commit (initial): v1
- [root@ken kenken]# Git reset --hard d1f5214 #恢复的时候指定 conmit 值
- HEAD is now at d1f5214 v2
- [root@ken kenken]# Git log #查看发现已经恢复到 v2 版本
- commit d1f52146b390c95c614e8ae7acc922da0f7e2d0d
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:34:11 2018 +0800
- v2
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
演示 2: 撤销工作区的内容
第一步: 创建一个文件
- [root@ken kenken]# echo "test1">e.tt
- [root@ken kenken]# echo "test1">e.tt
第二步: 把这个文件添加到缓存区
[root@ken kenken]# Git add e.tt
第三步: 在文件追加内容
[root@ken kenken]# echo "test3">>e.tt
第四步: 查看工作区
- [root@ken kenken]# Git status
- # On branch master
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # new file: e.tt
- #
- # 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: e.tt
- #
第五步: 撤销工作区的内容
使用命令 Git checkout -- filename 即可进行回滚
- [root@ken kenken]# Git checkout -- e.tt #数据回滚
- [root@ken kenken]# Git status #查看状态
- # On branch master
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # new file: e.tt
- #
- [root@ken kenken]# cat e.tt #查看文件内容, 发现 test3 内容已经没有了
- test1
- test2
演示 3: 撤销缓存区的内容
第一步: 创建文件并进行提交
- [root@ken kenken]# echo "1111">k.tt
- [root@ken kenken]# Git add k.tt
- [root@ken kenken]# Git commit -m "k.tt"
- [root@ken kenken]# Git log
- commit c5f46907ce0dfd6722b091fa7a7053ff48507ace
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:42:30 2018 +0800
- k.tt
第二步: 修改文件并加入到缓存区中
第一步一定要提交, 才能看到效果
- [root@ken kenken]# echo "222">>k.tt
- [root@ken kenken]# echo "333">>k.tt
- [root@ken kenken]# Git add k.tt
- [root@ken kenken]# Git status
- # On branch master
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # modified: k.tt
- #
第三步: 缓存区进行回退
- [root@ken kenken]# 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: k.tt
- #
- no changes added to commit (use "git add" and/or "git commit -a")
第四步: 工作区进行回滚
其实现在就已经回到了演示 2 中了
回退完成之后可以发现之前写的 222 和 333 已经没有了
- [root@ken kenken]# Git checkout -- k.tt
- [root@ken kenken]# Git status
- # On branch master
- nothing to commit, working directory clean
- [root@ken kenken]# cat k.tt
- 1111
演示 4: 撤销版本库
第一步: 查看历史版本
我们现在处于 k.tt 中, 现在希望回到 v3 中
- [root@ken kenken]# Git log
- commit c5f46907ce0dfd6722b091fa7a7053ff48507ace
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:42:30 2018 +0800
- k.tt
- commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:40:07 2018 +0800
- v4
- commit 1334466fd86ba0ba4ec95147809d71cb21345e95
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:28:11 2018 +0800
- v3
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
第二步: 查看所需要回滚的版本的 commit 值
通过上面我们可以看到 v3 的 commit 值为 1334466fd86ba0ba4ec95147809d71cb21345e95
第三步: 执行回滚操作
commit 值没有必要全部写出来, 只要写一部分就可以了
[root@ken kenken]# Git reset --hard 1334466f
第四步: 查看版本状态
现在我们处于 v3 版本之中
- [root@ken kenken]# Git log
- commit 1334466fd86ba0ba4ec95147809d71cb21345e95
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:28:11 2018 +0800
- v3
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
第五步: 回退到 v4 版本中
我们知道回退版本需要用到 commit 值
但是现在通过 Git log 已经看不到 v4 的 commit 值了, 现在怎么办呐?
可以通过 Git reflog 查看所有的历史操作
找到 v4 前面的值即可
- [root@ken kenken]# Git reflog
- 1334466 HEAD@{
- 0
- }: reset: moving to 1334466f
- c5f4690 HEAD@{
- 1
- }: commit: k.tt
- ec9c03a HEAD@{
- 2
- }: commit: v4
- 1334466 HEAD@{
- 3
- }: commit: v3
- 15370fe HEAD@{
- 4
- }: reset: moving to HEAD~1
- d1f5214 HEAD@{
- 5
- }: reset: moving to d1f5214
- 15370fe HEAD@{
- 6
- }: reset: moving to HEAD~1
- d1f5214 HEAD@{
- 7
- }: commit: v2
- 15370fe HEAD@{
- 8
- }: reset: moving to HEAD~1
- 22d39cb HEAD@{
- 9
- }: commit: v2
- 15370fe HEAD@{
- 10
- }: commit (initial): v1
第六步: 回滚到 v4 版本
- [root@ken kenken]# Git reset --hard ec9c03a
- HEAD is now at ec9c03a v4
- [root@ken kenken]# Git log
- commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:40:07 2018 +0800
- v4
- commit 1334466fd86ba0ba4ec95147809d71cb21345e95
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 12:28:11 2018 +0800
- v3
- commit 15370fed2791ba4c978018f840caed22fd38221f
- Author: ken <1614833@qq.com>
- Date: Tue Nov 20 10:17:18 2018 +0800
- v1
Git 分支介绍
几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来, 以免影响开发主线.
Git 处理分支的方式可谓是难以置信的轻量, 创建新分支这一操作几乎能在瞬间完成, 并且在不同分支之间的切换操作也是一样便捷. 与许多其它版本控制系统不同, Git 鼓励在工作流程中频繁地使用分支与合并, 哪怕一天之内进行许多次.
Git 分支使用演示
第一步: 查看分支
* 表示当前所处的分支位置
- [root@ken kenken]# Git branch
- * master
第二步: 创建分支
- [root@ken kenken]# Git branch ken
- [root@ken kenken]# Git branch
- ken
- * master
第三步: 切换分支
- [root@ken kenken]# Git checkout ken
- Switched to branch 'ken'
- [root@ken kenken]# Git branch
- * ken
- master
第四步: 在分支里面操作 e.tt
- [root@ken kenken]# ls
- a.tt c.tt d.tt e.tt
- [root@ken kenken]# echo "888888">>e.tt
- [root@ken kenken]# cat e.tt
- test1
- test2
- test3
- test4
- test5
- 888888
第五步: 提交
Git add . 表示提交全部
- [root@ken kenken]# Git add .
- [root@ken kenken]# Git commit -m "test for branch"
- [ken b621584] test for branch
- 1 file changed, 1 insertion(+)
第六步: 切换回主分支并查看文件
现在查看 e.tt 并没有看到刚才子分支提交的内容
- [root@ken kenken]# Git checkout master
- Switched to branch 'master'
- [root@ken kenken]# Git branch
- ken
- * master
- [root@ken kenken]# cat e.tt
- test1
- test2
- test3
- test4
- test5
第七步: 合并子分支
合并之后发现现在主分支也可以看到刚才子分支添加的内容了
- [root@ken kenken]# Git merge ken
- Updating ec9c03a..b621584
- Fast-forward
- e.tt | 1 +
- 1 file changed, 1 insertion(+)
- [root@ken kenken]# cat e.tt
- test1
- test2
- test3
- test4
- test5
- 888888
来源: https://www.cnblogs.com/kenken2018/p/9987381.html