关闭

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

433人阅读 评论(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本地库操作的上半节内容了,一定要熟练这些命令,因为真的真的真的很实用.


3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57259次
    • 积分:1918
    • 等级:
    • 排名:千里之外
    • 原创:123篇
    • 转载:16篇
    • 译文:0篇
    • 评论:62条
    最新评论