git简介和命令

一、什么是 Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,与常用的版本控制工具 CVS, Subversion(svn) 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

二、Git和 SVN 之间的区别

GIT 不仅仅是个版本控制系统,它也是个内容管理系统 (CMS), 工作管理系统等。

( 一 ) GIT 是分布式的,SVN 不是:这是 GIT 和其它非分布式的版本控制系统,例如

SVN,CVS 等,最核心的区别。

( 二 ) GIT 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn,.cvs 等的文件夹里。

( 三 ) GIT分支和 SVN的分支不同:分支在 SVN 中一点不特别,就是版本库中的另外的一个目录。

( 四 ) GIT没有一个全局的版本号,而 SVN有:目前为止这是跟 SVN相比 GIT 缺少的最大的一个特征。

( 五) GIT 的内容完整性要优于SVN:GIT 的内容存储使用的是SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

三、安装 Git

在使用 Git 前我们需要先安装 Git。

Git 目前支持 Linux/Unix、Solaris、Mac 和 Windows 平台上运行。

Git 各平台安装包下载地址为:http://git-scm.com/downloads 这里我们以 Windows 系统为例:

在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包, 可以到 GitHub 的页面上下载 exe 安装文件并运行:

安装包下载地址:http://msysgit.github.io/

图片.png

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

在开始菜单里找到"Git"->"Git Bash",会弹出 Git 命令窗口,你可以在该窗口进行Git 操作。
msysgit 是 windows 版的 Git, 如下:


图片.png

需要从网上下载一个,然后进行默认安装即可。安装完成后,在开始菜单里面找到“Git –> Git Bash”, 如下:
图片.png

会弹出一个类似的命令窗口的东西,就说明 Git 安装成功。如下:


图片.png

安装完成后,还需要最后一步设置,在命令行输入如下:


图片.png

因为 Git 是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
注意:git config –global 参数,有了这个参数,表示你这台机器上所有的 Git 仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。

四、 Git 的工作流程

(一)克隆 Git 资源作为工作目录。
( 二 ) 在克隆的资源上添加或修改文件。
( 三 ) 如果其他人修改了,你可以更新资源。
( 四 ) 在提交前查看修改。
( 五 ) 提交修改。
( 六 ) 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。下图展示了 Git 的工作流程:


图片.png

五、Git 的工作区、暂存区、版本库

(一)基本概念

我们先来理解下 Git 工作区、暂存区和版本库概念

1.工作区:就是你在电脑里能看到的目录。

  1. 暂存区:英文叫 stage,或 index。一般存放在 ".git目录下 " 下的 index 件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  2. 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:


    图片.png

    (1)图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是存区
    (stage, index),标记为 "master" 的是 master 分支所代表的目录树。

(2)图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个" 游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

(3)图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

(4)当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的 ID 被记录在暂存区的文件索引中。

(5)当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,
master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

(6)当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

(7)当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。

(8)当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

(9)当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时, 会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

六、Git 具体操作

( 一 ) 创建版本库。
什么是版本库?版本库又名仓库,英文名 repository, 你可以简单的理解一个目录, 这个目录里面的所有文件都可以被Git 管理起来,每个文件的修改,删除,Git都能跟踪, 以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
所以创建一个版本库也非常简单,如下我是 D盘 –> www下 目录下新建一 testgit 版本库。


图片.png

pwd 命令是用于显示当前的目录。
通过命令 git init把这个目录变成 git 可以管理的仓库,如下:


图片.png

这时候你当前 testgit 目录下会多了一个 .git 的目录,这个目录是 Git 来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git 仓库给破坏了。如下:


图片.png

2.把文件添加到版本库中。
首先要明确下,所有的版本控制系统,只能跟踪文本文件的改动,比如 txt 文件,网页,所有程序的代码等,Git 也不列外,版本控制系统可以告诉你每次的改 动,但是图片, 视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从 1kb 变成 2kb,但是到底改了啥,版本控制也不知道。

图片.png

我在版本库 testgit 目录下新建一个记事本文件 readme.txt 内容如下:11111111
第一步:使用命令 git add readme.txt添加到暂存区里面去。如下:

图片.png

如果和上面一样,没有任何提示,说明已经添加成功了。

第二步:用命令 git commit 告诉 Git,把文件提交到仓库。

图片.png

图片.png

现在我们已经提交了一个 readme.txt 文件了,我们下面可以通过命令 git status 来查看是否还有文件未提交,如下:
图片.png

说明没有任何文件未提交,但是我现在继续来改下 readme.txt 内容,比如我在下面添加一行 2222222222 内容,继续使用 git status 来查看下结果,如下:

图片.png

上面的命令告诉我们 readme.txt 文件已被修改,但是未被提交的修改。
接下来我想看下 readme.txt 文件到底改了什么内容,如何查看呢?可以使用如下命令:
git diff readme.txt 如下:

图片.png

如上可以看到,readme.txt 文件内容从一行 11111111 改成 二行 添加了一行

22222222 内容。

知道了对 readme.txt 文件做了什么修改后,我们可以放心的提交到仓库了,提交修改和提交文件是一样的 2 步 ( 第一步是 git add 第二步是:git commit)。
如下:

图片.png

( 二 ) 版本回退:

如上,我们已经学会了修改文件,现在我继续对 readme.txt 文件进行修改,再增加一行
内容为 33333333333333. 继续执行命令如下:


图片.png

现在我已经对 readme.txt 文件做了三次修改了,那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 git log 演示如下所示:


图片.png

git log 命令显示从最近到最远的显示日志,我们可以看到最近三次提交,最近的一次是 , 增加内容为 333333. 上一次是添加内容 222222,第一次默认是 111111. 如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline 演示如下:


图片.png

现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下 2 种命令,第一种是:git reset -–hard HEAD^ 那么如果要回退到上上个版本只需把 HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前 100 个版本的话, 使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset -–hard
HEAD~100 即可。未回退之前的 readme.txt 内容如下:

图片.png

如果想回退到上一个版本的命令如下操作:
图片.png

再来查看下 readme.txt 内容如下:通过命令 cat readme.txt 查看
图片.png

可以看到,内容已经回退到上一个版本了。我们可以继续使用git log 来查看下历史记录信息,如下
图片.png

我们看到 增加 333333 内容我们没有看到了,但是现在我想回退到最新的版本,如: 有 333333 的内容要如何恢复呢?我们可以通过版本号回退,使用命令方法如下:
git reset -hard 版本号 ,但是现在的问题假如我已经关掉过一次命令行或者 333 内容的版本号我并不知道呢?要如何知道增加3333内容的版本号呢?可以通过如下命令即可获取到版本号:git reflog 演示如下
图片.png

通过上面的显示我们可以知道,增加内容 3333 的版本号是 6fcfc89. 我们现在可以命令 git reset –hard 6fcfc89 来恢复了。演示如下

图片.png

可以看到 目前已经是最新的版本了。

( 三 ) 理解工作区与暂存区的区别?

[图片上传失败...(image-1d7b3a-1543814452017)] 工作区:就是你在电脑上看到的目录,比如目录下 testgit里的文件 (.git 隐藏目录版本库除外 )。或者以后需要再新建的目录文件等等都属于工作区范畴。

[图片上传失败...(image-8c7038-1543814452017)] 版本库(Repository):

工作区有一个隐藏目录.git, 这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是 stage(**** 暂存区 ),还有 Git 为我们自****动创建了第一个分支 master,以及指向 master的一个指针 HEAD。

我们前面说过使用 Git 提交文件到版本库有两步:

第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。

第二步:使用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前

分支上。

我们继续使用 demo 来演示下:

我们在 readme.txt 再添加一行内容为 4444444,接着在目录下新建一个文件为 test.txt 内容为 test,我们先用命令 git status 来查看下状态,如下


图片.png

现在我们先使用 git add 命令把 2 个文件都添加到暂存区中,再使用 git status 来查看下状态,如下
图片.png

接着我们可以使用 git commit 一次性提交到分支上,如下
图片.png

( 四 ) Git 撤销修改和删除文件操作。

3. 撤销修改:

比如我现在在readme.txt 文件里面增加一行 内容为 555555555555,我们先通过命令查看如下


图片.png

在我未提交之前,我发现添加 5555555555555 内容有误,所以我得马上恢复以前的版本,现在我可以有如下几种方法可以做修改:

第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后

add 添加到暂存区,最后 commit 掉。

第二:我可以按以前的方法直接恢复到上一个版本。使用 git reset****–hard HEAD^ 但是现在我不想使用上面的 2 种方法,我想直接想使用撤销命令该如何操作呢?首先

在做撤销之前,我们可以先用 git status 查看下当前的状态。如下所示


图片.png

可以发现,Git 会告诉你,git checkout — file 可以丢弃工作区的修改,如下命令: git checkout – readme.txt, 如下所示

图片.png

命令 git checkout –readme.txt意思就是,把 readme.txt 文件在工作区做的修改全部撤销,这里有 2 种情况,如下:

readme.txt 自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。

另外一种是 readme.txt 已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。

对于第二种情况,我想我们继续做 demo来看下,假如现在我对 readme.txt添加一行内容为 6666666666666,我 git add增加到暂存区后,接着添加内容 7777777,我想通过撤销命令让其回到暂存区后的状态。如下所示

图片.png

注意:命令 git checkout — readme.txt 中的 — 很重要,如果没有 — 的话,那么命令变成创建分支了。

删除文件

假如我现在版本库 testgit 目录添加一个文件 b.txt, 然后提交。如下


图片.png

如上:一般情况下,可以直接在文件目录中把文件删了,或者使用如上rm 命令:rm b.txt,如果我想彻底从版本库中删掉了此文件的话,可以再执行 commit 命令 提交掉,现在目录是这样的

图片.png

只要没有 commit 之前,如果我想在版本库中恢复此文件如何操作呢? 可以使用如下命令 git checkout — b.txt,如下所示


图片.png

再来看看我们 testgit 目录,添加了 3 个文件了。如下所示


图片.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容