Git介绍及常用操作演示(一)--技术流ken
Git介绍
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,所以,工作的时候就不需要联网了,因为版本库都是在自己的电脑 上。现在每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
主要有如下特点:
1. 版本控制
2. 分布式
3. 工作过程是将服务器上的代码下载到本地,本地开发完成后,在提交到服务器端
git相比于svn功能更加的强大,命令也很多。本篇博客将详细介绍一些常用命令的使用操作。
Git和SVN的对比
1.git是分布式的,svn是集中式的。(最核心)
2.git是每个历史版本都存储完整的文件,便于恢复,svn是存储差异文件,历史版本不可恢复。(核心)
3.git可离线完成大部分操作,svn则不能。
4.git有着更优雅的分支和合并实现。
5.git有着更强的撤销修改和修改历史版本的能力
6.git速度更快,效率更高。
基于以上区别,git有了很明显的优势,特别在于它具有的本地仓库。
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.]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
第三步:进入解压下目录下并执行编译
[root@ken git-2.7.]# make prefix=/usr/local/git all
[root@ken git-2.7.]# make prefix=/usr/local/git install
第四步:导入二进制程序
[root@ken git-2.7.]# rm -rf /usr/bin/git
[root@ken git-2.7.]# ln -s /usr/local/git/bin/git /usr/bin/git
[root@ken git-2.7.]# git --version
git version 2.7.
演示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 <@qq.com>
Date: Tue Nov :: + 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 <@qq.com>
Date: Tue Nov :: + v2 commit 15370fed2791ba4c978018f840caed22fd38221f
Author: ken <@qq.com>
Date: Tue Nov :: + v1
第九步:恢复到第v1版本
[root@ken kenken]# git reset --hard HEAD~
HEAD is now at 15370fe v1
[root@ken kenken]# git log
commit 15370fed2791ba4c978018f840caed22fd38221f
Author: ken <@qq.com>
Date: Tue Nov :: + v1
第十步:恢复到v2版本
[root@ken kenken]# git reflog #首先使用git reflog可以查看commit值
15370fe HEAD@{}: reset: moving to HEAD~
d1f5214 HEAD@{}: commit: v2
15370fe HEAD@{}: reset: moving to HEAD~
22d39cb HEAD@{}: commit: v2
15370fe HEAD@{}: 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 <@qq.com>
Date: Tue Nov :: + v2 commit 15370fed2791ba4c978018f840caed22fd38221f
Author: ken <@qq.com>
Date: Tue Nov :: + v1
演示2:撤销工作区的内容
第一步:创建一个文件
[root@ken kenken]# echo "test1">>e.tt
[root@ken kenken]# echo "test2">>e.tt
第二步:把这个文件添加到缓存区
[root@ken kenken]# git add e.tt
第三步:在文件追加内容
在包含.git的目录中,只要当前目录下的文件有修改都会自动进入工作区
所以下面当往文件e.tt中添加test3的时候。e.tt这个文件就进入到了工作区了
1.文件进入工作区:包含.git隐藏文件的目录中,文件修改就会自动进入
2.文件进入缓存区:git add .
3.文件进入仓库:git commit -m 'v1'
[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 "">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 <@qq.com>
Date: Tue Nov :: + k.tt
第二步:修改文件并加入到缓存区中
第一步一定要提交,才能看到效果
[root@ken kenken]# echo "">>k.tt
[root@ken kenken]# echo "">>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 reset HEAD k.tt
Unstaged changes after reset:
M 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
演示4:撤销仓库中的内容
第一步:查看历史版本
我们现在处于k.tt中,现在希望回到v3中
[root@ken kenken]# git log
commit c5f46907ce0dfd6722b091fa7a7053ff48507ace
Author: ken <@qq.com>
Date: Tue Nov :: + k.tt commit ec9c03a48c816aa08fdd2216effdd2f124f1b4e3
Author: ken <@qq.com>
Date: Tue Nov :: + v4 commit 1334466fd86ba0ba4ec95147809d71cb21345e95
Author: ken <@qq.com>
Date: Tue Nov :: + v3 commit 15370fed2791ba4c978018f840caed22fd38221f
Author: ken <@qq.com>
Date: Tue Nov :: + v1
第二步:查看所需要回滚的版本的commit值
通过上面我们可以看到v3的commit值为1334466fd86ba0ba4ec95147809d71cb21345e95
第三步:执行回滚操作
commit值没有必要全部写出来,只要写一部分就可以了
[root@ken kenken]# git reset --hard 1334466f
第四步:查看版本状态
现在我们处于v3版本之中
[root@ken kenken]# git log
commit 1334466fd86ba0ba4ec95147809d71cb21345e95
Author: ken <@qq.com>
Date: Tue Nov :: + v3 commit 15370fed2791ba4c978018f840caed22fd38221f
Author: ken <@qq.com>
Date: Tue Nov :: + v1
第五步:回退到v4版本中
我们知道回退版本需要用到commit值
但是现在通过git log已经看不到v4的commit值了,现在怎么办呐?
可以通过git reflog查看所有的历史操作
找到v4前面的值即可
[root@ken kenken]# git reflog
HEAD@{}: reset: moving to 1334466f
c5f4690 HEAD@{}: commit: k.tt
ec9c03a HEAD@{}: commit: v4
HEAD@{}: commit: v3
15370fe HEAD@{}: reset: moving to HEAD~
d1f5214 HEAD@{}: reset: moving to d1f5214
15370fe HEAD@{}: reset: moving to HEAD~
d1f5214 HEAD@{}: commit: v2
15370fe HEAD@{}: reset: moving to HEAD~
22d39cb HEAD@{}: commit: v2
15370fe HEAD@{}: 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 <@qq.com>
Date: Tue Nov :: + v4 commit 1334466fd86ba0ba4ec95147809d71cb21345e95
Author: ken <@qq.com>
Date: Tue Nov :: + v3 commit 15370fed2791ba4c978018f840caed22fd38221f
Author: ken <@qq.com>
Date: Tue Nov :: + 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
Git介绍及常用操作演示(一)--技术流ken的更多相关文章
- Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken
Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...
- CI 知识 :Git介绍及常用操作
Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发 ...
- Redis基础认识及常用命令使用(一)--技术流ken
Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集 ...
- Docker介绍及常用操作演示(一)--技术流ken
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...
- Docker介绍及常用操作演示(一)
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互 ...
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken
前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...
- Docker端口映射及创建镜像演示(二)--技术流ken
前言 在上一篇博客<Docker介绍及常用操作演示--技术流ken>中,已经详细介绍了docker相关内容以及有关镜像和容器的使用命令演示. 现在我们已经可以自己下载镜像,以及创建容器了. ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Redis Cluster集群架构实现(四)--技术流ken
Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...
随机推荐
- JavaGC学习笔记
1.简介Java在JVM虚拟机上的垃圾回收(GC)机制,在合适的时间触发垃圾回收,将不需要的内存空间回收释放,避免无限制的内存增长导致的OOM. 1.1 Java堆内存结构Java将堆内存分为3大部分 ...
- 在原生Windows安装Keras
既然要深入学习,就不能和时代脱节,所以选择了keras,资源相对比较丰富.由于Windows饱受歧视,各种文档都不推荐使用.但我又没有换系统的成本,所以还是凑合下,毕竟他们给出了方法,稍微折腾一下还是 ...
- 《代码不朽:编写可维护软件的10大要则(C#版)》读后感
本书作者Joost Visser,译者张若飞.本书讲解了编写可维护代码的10个要则,从目录就可以看出这10点分别是: 编写短小的代码单元(15行以内,在大部分情况下还是能实现的,但是当我们使用Linq ...
- <笔记>TP5的分页传递额外参数
默认生成的分页只有page一个参数,若需要提供额外的参数才能访问分页(例如查询结果的分页,需要传入查询关键字的参数才能显示结果),则需要设置额外参数query
- ARM指令学习
跳转指令 直接向程序计数器PC写入i跳转地址值,可以实现在4GB的地址空间中的任意跳转. ARM跳转指令可以完成向前或向后的32MB的地址空间的跳转. -B 跳转指令 -BL 带返回的跳转指令 -BL ...
- PB开发境界 多个DW进行update
多个DW进行update //菜鸟代码dw_1.Update()dw_2.Update()初级代码IF dw_1.Update() = 1 And dw_2.Update() = 1 THEN ...
- Delphi 中的 IfThen 函数
问题来源: http://www.cnblogs.com/del/archive/2008/11/14/1120015.html#1370413 StrUtils 单元和 Math 单元 分别有一个 ...
- 判断exe执行结束,事件监听
[转载]C#调用Exe文件的方法及如何判断程序调用的exe已结束 原文地址:C#调用Exe文件的方法及如何判断程序调用的exe已结束作者:guoguo 很简单的代码就可以实现C#调用EXE文件 ...
- Java虚拟机:内存分配策略
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java中提倡的自动内存管理机制最终可以归结为自动化的解决两个问题:给对象分配内存和回收分配给对象的内存.在之前的博客中已经详细讲解了内存 ...
- 电脑知识,一键开启Win10“超级性能模式”
现在主流系统以及从WIN7慢慢的转移到了WIN10,微软也为WIN10做了很多优化跟更新.今天要跟大家说的这个功能很多人肯定没有听说过.那就是WIN10的超级性能模式. 1. 大多数Win10是没有滴 ...