GIT教程 — 详解本地库的使用以及原理(一)

1599人阅读 评论(1) 收藏 举报
分类:

详解本地库的使用以及原理(一)






对于广大的windows程序开发大军,大家都会使用windows上面的git-bash客户端,本地的git客户端是不会离开git版本仓库的,因git的基础就是仓
库,所以我们要学会什么是一个仓库. 并且明白仓库如何操作与使用.关于仓库你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理
起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”.

首先我们来了解版本库的创建>>>>>>

步骤一:创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录.
步骤二:使用git init命令,使这个目录变成git可以管理的仓库.



瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是
Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个
目录默认是隐藏的,用ls -ah命令就可以看见.

步骤三:将文件添加进仓库里面.

这里没有什么固定的方法,比如我就是直接在桌面把文件拖进目录里面. windows下的开发朋友这里保存你的文件内容推荐使用Notepad++这个软件保
存,如果使用windows自带的txt记事本,当你往远程库推送的时候会有一点小小的bug.现在我创建一个文件,随便写点内容,然后保存到MT目录中.



我们可以看到,目前文件已经放到仓库里面了,举个例子,我是一个快递员,你去别人家里送快递,你是直接快递往门口一丢就走,还是给别人打个招
呼后送到别人手里? 如果你是前者,那么你可能要失业了. 当然我们把文件推送进仓库也是同样的道理,首先要告诉仓库我给你送来了谁,最后再告诉
他我已经把东西交付给你了. 就是接下来这两个命令.
$ git add liang.txt  //告诉MT仓库,我给你添加过来了一个liang.txt文件
$ git commit -m "举例" //把Liang.txt文件提交给MT库,而且给这次提交做了说明 "举例"



这样我们就成功的讲文件推送至MT仓库中,这里有几个注意的地方,简单解释一下git commit命令,-m后面输入的是本次提交的说明,
可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,
但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要. 

其实这里肯定会有人疑惑,往git仓库里面推送为什么是git add和git commit两步,其实直接提交给库也可以啊?
这里就很简单了,因为你在git commit是一次性推送完暂存区的所有文件,而git add是每次都往暂存区里面推送内容,所以你也可
git add很多次之后,一次性git commit这都是可以的. 具体什么是暂存区估计下篇博客 你就明白了.


git本地库的监视器


git本地库还有一个特别强大的功能,那就是他可以检验出你那里发生了更改,并且找到更改了什么? 接下来我来演示效果.
刚刚我创建了一个liang.txt,并且把它推送git的本地库里面,目前它的内容就是 my name is liangliang


接下来我在源文件当中对liang.txt进行修改, 添加一句 I am programmer

我们每次想把文件推送到git本地库之前前,先检验一下自己那个文件更改了内容,我们可以使用一条指令进行:
$ git status
它可以检验出你在提交文件到本地库之前,那些文件被修改过,如果被修改过就会被标识出,如下图所示.

好我现在知道啦那个文件被修改了,现在我忘了我修改这个文件里面的什么内容怎么办?
没关系我们还有办法,有一条指令可以显示出你修改的内容:
$ git diff

现在我们差不多了解这几个功能了,接下来我对刚刚的所有内容进行git commit,然后我们再运行一次git status,看下图的结果:


Git告诉我们当前没有需要提交的修改,而且,工作目录是干净的. 这几个命令很重要一定要学会熟练运用.


GIT本地库的时光机

我们知道现实生活是不会允许你回到过去或者跳到未来去,但是我们的git又可以!! 屌不屌(手动微笑)好了好了,其实就是比如你这个版本提交
到本地库了,但是发现你的这个版本其实还不如上一个版本,这就有点猴子搬玉米的故事的味道了,但是这次我们的猴子是幸运的,因为他有git这
个强大的工具,好了言归正传,我们看看git的版本回退是一个什么样子?

当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个
命令可以告诉我们历史记录,在Git中,我们用git log命令查看,举个例子我们前几次的修改liangliang.txt文件,我们来看看记录吧~
$ git log


你看看我们每次修改的备注我们都看得一清二楚,没毛病吧~ 它显示的顺序分别是从进到远,"举例" "add programmer" "eat"
如果你觉得消息有点多,看到你烦那么很简单,使用这一条指令:

$ git log --pretty=oneline



接下来,我来说一下git为什么可以版本回退?? git记录一个库的版本的底层实现是什么??



Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向"add programmer".
在图中可以看到每一个版本都有自己的版本号,就是每个版本下面那个金黄色一串字符,也就是我们使用git log 指令找到的.这些版本号就是
告诉HEAD指针该版本的位置,然后让HEAD指针指向过去,这样就实现版本回退了. 如果你回退之后想回到未来,这时候只需要将"eat"的版本号告诉
我们的HEAD指针. 接下来我们就认识一下,可以回退版本的指令. (指令内部还是将版本号告诉HEAD指针,理解这里的原理就可以呢).
现在我们想回到"add programmer"版本,我们可以使用下面这条指令:
$ git reset --hard HEAD^

注意这里的HEAD后面的这个^,如果你想回到上上一个版本那你可以HEAD^^,但是回到前50个版本的时候就非常繁琐了,我们还可以这样: HEAD~50
现在我们继续实现我们回到上一个版本:



我们发现我们不仅回去了,"eat"这个版本也在历史记录中被抹掉了. 我艹!老子只是回过去看一个东西,然后还有回去呢回不去了怎么办(手动微笑)?
这里不用但是,我们是可以挽救的,只要你的命令窗口没有关,你往上拉找到eat的版本号,版本号是什么? 废话,刚刚不是都说了就是那个金黄色的
字符串. 现在拿到eat的版本号我们使用一个指令:
$ git reset --hard 02fdf5e



嘻嘻嘻,我们又回来了. 这里版本号不用输全的,一般只输前7位就能找到,你不能偷懒只输两位,这样git会给你找出来一大堆内容的.
来来来,还有更不幸的问题,如果我们回到过去了,并且我们还关闭了命令窗口,下次打开啥都没有这可怎么办? 没关系,我们的git是万能的!!
git内部有一个生死簿的东西,一切一切它一直在记载,我们来看看如何调用出这个终极大招!
$ git reflog




总结

我们学习完了,git本地库操作的上半节内容了,一定要熟练这些命令,因为真的真的真的很实用.


查看评论

详解GIT远程库的创建、与本地库关联以及推送内容到远程库

GIT是一个分布式版本控制系统,这不同于CVS,SVN等集中式版本控制系统,同一个Git仓库,可以分布到不同的机器上,且每台机器上版本库是一样的没有主次之分。所以一般来讲需要至少两太电脑才能实验远程库...
  • whatever9527
  • whatever9527
  • 2016-12-02 15:22:48
  • 1316

GIT教程 — 详解本地库的使用以及原理(二)

详解本地库的使用以及原理(二) 我们在上一个博客当中了解到,如何创建一个本地库,然后查看本地库的修改,以及有本地库的各个版本之间的切换....
  • Dawn_sf
  • Dawn_sf
  • 2017-10-14 15:27:23
  • 896

TortoiseGit工具使用教程之一环境搭建

前段时间一直在写自己的毕业论文,实验室和宿舍来回跑,每次都是把论文拷贝到U盘里面,想想真是很麻烦。联想到自己前段时间做项目一直在用SVN(版本控制器),只用简单的提交和更新就能完成更改和复制操作,很方...
  • xiaoxiangshenjian
  • xiaoxiangshenjian
  • 2017-07-30 09:16:44
  • 300

掘金小册:Git 原理详解和实用指南

正如前两天公众号里说的,最近开启疯狂模式,和掘金合作,写了一本掘金小册。这本小册的名字是:《Git 原理详解和使用指南》。这本小册简单来说,是一本帮助那些始终学不会、学不好 Git 的人真正一次性学会...
  • LSpQ35k7O5AJ21l1H9o
  • LSpQ35k7O5AJ21l1H9o
  • 2017-11-30 00:00:00
  • 1351

<<pro git>>

  • 2013年02月14日 21:33
  • 5.28MB
  • 下载

海龟git操作教程

TortoiseGit 简称 tgit, 中文名海龟Git. 下载: 下载git(msysgit)和tortoisegit地址:http://rj.baidu.com/search/ind...
  • Ha_Pipi
  • Ha_Pipi
  • 2016-12-15 16:42:49
  • 1658

git在本地仓库上的使用

git作为一款优秀的版本控制工具受到广大用户的欢迎和喜爱,不管是开发还是项目管理都发挥着重要的作用。前面一篇文章已经简要说了如何在github上注册以及在本地添加SSH秘钥操作,包括在本地通过git指...
  • cai2016
  • cai2016
  • 2016-12-16 16:02:15
  • 2829

git clone/版本库之间的push与pull

1. 目的:为了做一个备份,所以需要一个其它的版本库。    也就是git clone,然后通过git push 与 git pull实现两个版本库的同步。    语法:git push ...
  • u012150179
  • u012150179
  • 2013-12-09 19:56:27
  • 5522

git教程 - 概念 原理 使用

一些名称 git ---- 版本控制工具。 git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds开始着手开发git是为了作为一种过渡方...
  • chenj_freedom
  • chenj_freedom
  • 2016-01-19 16:50:54
  • 14042

git基本原理详解

1.什么是git         这个去google一下可以搜出一大堆,git就是一个软件管理器,不同一般的是它是分布式的,不仅有一个中心的服务器控制最新版本代码,而且每个开发者自己还有个本地仓库,所...
  • xiaoputao0903
  • xiaoputao0903
  • 2014-04-17 11:51:38
  • 7375
    个人资料
    持之以恒
    等级:
    访问量: 11万+
    积分: 3173
    排名: 1万+
    最新评论