15分钟学会使用Git

作者:Mark24

邮箱:mark.zhangyoung@qq.com

时间:2015.07.28

开头扯扯淡

(想看干货的跳过这段–>直奔干货)

个人也走了很多的弯路学习Git

幸运的是,弯路走的比较少,在Git上只浪费了5天

可是我见过许多人,浪费了可能更久

标题起个15分钟是个噱头

抛下那些迂腐不堪的书本

类似《Git Pro》,《Git权威指南》,《Git社区手册》的那些

我打赌,看那些看得越久,你只会觉得Git越难用,并且用过SVN的同学,还会吐槽Git设计的复杂

虽然我不是大牛,但是我站在用户的角度,非常想吐槽Git

Git设计的就是很烂

为毛说他烂?

上图来说明一切

下图是SVN的操作逻辑:

主线傻子都能看明白,就是图中心的三条线:

Checkout:克隆项目

Commit:提交本地代码

Update:更新本地代码 

图下面三个线:

add:添加项目

rm:删除项目

revert:撤销 

所以我站在用户的角度,SVN的设计是清晰的

个人觉得是设计的典范

本来嘛

软件的设计除了功能性

还要设计本身就是美的

下面来看看Git

上图!

下面是Git的操作流程:

说点通俗点,设计的就是一坨狗屎,完全找不到规律

要我说Linux社区宗教性十足,被追捧的大神……

但是往往盛名之下,其实难副

这玩意就是

东一砖头,西一砖头盖起来的

我在怀疑有没有设计过!

顺便吐槽

自己也做web开发

JS这门语言设计的最烂

随着越了解JS,越感觉JS设计的烂

JS的语法之混杂,糅杂了C,Java …的各种语法

实在和小而美的Python没法比 

JS和Git一样

都是没有用心设计过的产物

得过且过,功能为上的产物

所以,学习语言,也要了解他们的脾气和品行 

Python你可以用数学的逻辑去推理去学习,往往可以举一反三,因为设计逻辑就在那里

JS 呵呵……自己慢慢走遍所有的坑吧 

后来我知道JS是10天设计出来了……我只能呵呵,说明我的语言感还是挺准的

Git核心功能设计出来,用时也不长,可能一周,具体的忘了 

总之,我们不能迷信权威

说了这么多,只想说

Git设计的都这么烂

你在看他的命令行设计的

我靠

简直就是随意 

所以说,别用命令行了,不能在树上吊死

这就是为什么可以15分钟速成,因为我们根本不用那个坑爹的命令

15分钟掌握Git

先说怎么个15分钟法 

首先呢,我会给出Git的工作流程图 

然后我会简单的解释一下,Git的基本概念和工作流程

对Git完全没概念的同学,可以看看 

然后我们用一个更高级的,直观的工具,完成所有想做的事情

而这一切,不需要去挨个挨个敲指令

几乎可以找到每个常用的境况 

然后重点来了

重点来了

重点来了 

重要的事情说三遍 

用一个叫做Source Tree的软件

安装核心的git

再安装一个足够好的图形界面客户端

这就是我的方案 

先别吐槽

我会告诉你用Source Tree而不是用别的 

Git本身的Windows上的客户端,烂的不堪,直接忽略 

TortoiseGit这种设计烂的软件 

我都懒得推荐

个人把它拉入黑名单

推荐大家也别用了

界面丑也就算了,基本上反直觉

在图形化如此发达的今天,这种软件竟然还存在

这些也就算了,反正开源软件,界面质量都不高

但是问题,这个软件刷新率不高

当你用Sublime打开文件的时候,然后最小化,用TortoiseGit来pull最新代码

Sublime是不会刷新的

还有TortoiseGit简化了Git的模型,取消了暂存区的概念

不想多说了

你会偶尔出现,照着书上,用TortoiseGit操作哦,结果出现错误

反正不管怎么样吧

我就被TortoiseGit给搞的晕头转向之后就弃用了

Source Tree是个好东西 

来说说Git是咋么一回事

现在祭上图

咱们挨个挨个解释一下

最好把这张图,单独开在一个窗口,对照着,下面就来解释这个图 

首先看这张图中间,四个圆柱 

Workspace:工作区,就是你正在写的代码

index:暂存区,一个本地的缓冲区

local repository:本地仓库

remote repository:远程仓库 

先来讲讲术语

写代码,写完了保存,这是一般文件的流程

Git多加了一个流程,就是保存后,你要提交

Git会追踪你每次保存,和上次保存之间的差别  

然后把这些信息,保存在一个文件夹下,文件夹名叫.git

这个文件夹叫做仓库,用仓库可以追踪代码,看到每次改变了什么,可以还原到以前的状态,也可以看别人改了什么,这就是代码版本控制的本质,一种高级的保存功能,自带时光机的那种

Workspace工作区

就是你正在写的代码,正在打开的编辑器里面的内容,解释完了,就这样 

index暂存区

index照理应该翻译叫索引,这里叫暂存区

暂存区是干嘛的?

暂存区是Git和SVN的最重要的差别之一

我们来看图,箭头就是代码流动的方向 

Git的流程工作流程就是:

眼前正在写的代码(workspace)觉得差不多了

add命令

提交到暂存区(index)类似于保存一下

然后你可以返回正在写的代码(workspace)继续写,写的到了一个阶段了

add命令

又提交到了暂存区(index) 

对就是这样子工作的! 

举一反三!!

举一反三!!

重要的事情说三遍,举一反三 

当你多次提交,基本工作完成的差不多了

按照道理

你应该每次都add到了index暂存区 

现在好了,任务完成

要把暂存区里的东西,放到本地仓库(local repository) 

使用commit命令 

大家看图应该注意到

worksp –> local repository

有一个绿色的箭头 commit -a

这条命令

就是同时完成,把当前的修改,提交到暂存区,然后把暂存区的提交到

本地仓库 

Git每次提交的,都是保存变化的改动,不是简简单单的复制一遍 

本地仓库(local repository)

就是正式的代码保存的地方 

如果你本地所有的内容都被commit到本地仓库了

表示你已经很满意所有的代码

并且完成了所有的编写 

这个时候,你想把代码上传到Github或者公司的Git服务器,提交给别人

看图

local repository –> remote repository

中间是push操作 

想对你正在工作的电脑,你电脑叫local,本地

网络上的,就叫remote,远程 

remote repository 远程仓库

就是网络上的仓库

一般是放在网络上保存

或者和团队一起配合着干活

网络仓库就成为一个中枢的感觉 

我们看图的上半部分

提交的过程,按照箭头,由下往上: 

remote repository:远程仓库

^

|

| push:就是“推”,把本地的正式的提交代码,推到网络上

|

local repository:本地仓库

^

|

| commit:合并多次修改,提交到仓库保存

|

index :暂存区

^

|

| add:一段阶段的代码,保存

|

Workspace:正在写代码,写的不错了 

再来看看这张图的下三路 

remote repository –> workspace 

这里有一个pull 黄颜色的,操作(rebase后面讲)

pull就是“拉”的意思,拉动,把网络的代码,拉动到本地

拉动的目标是workspace,就是你正在写的代码 

解释一下这里,比如你正在写代码,或者打开了一个项目

编辑器Sublime Text上代码显示出来了,表示文件打开了

这个时候,公司的小明告诉你,公司昨天几位同事加班加点,代码更新了

让你更新一下代码,以获得人家工作一晚上加班的工作成果

你这个时候就要pull,拉取最新的代码,以保证自己和大家的工作进度一致

pull的意义在于,执行完操作,会刷新你的编辑器

Sublime Text上的代码,会变化到最新的代码

不信你试试 

TortoiseGit来pull的时候,编辑器刷新与否,似乎看心情 = =b 

下面来看红色,红色的两个箭头

最左边有一个小字

revert

意思大概是反转,撤销的意思 

对啊,你光提交,万一提交错了呢?

Git里有一套撤销的机制

撤销的机制尤其复杂

这里引用一篇文章戳这里

不过那些都不是我们要说的重点

学习嘛,要抓住主干,细枝末节的,晚点再说,又不一定全都遇上

Git复杂的就可能是撤消了,这些我们暂时不管 

下面还有两路灰色的,左边的说明是compare

就是可以比较你每次修改的代码和之前的代码有什么区别

这是Git最重要的作用,就是可以看到每次提交的不同 

这些也不说,放在后面说 

现在主要的就是把上三路和pull熟悉 

小结

【工作区】->add->【暂存区】->commit->【本地仓库】->push->【远程仓库】 

【工作区】<------------------ pull ----------------- 【远程仓库】

记住:

add、commit、push、pull 

可爱的Source Tree

Source Tree是一个优秀的,直觉式的Git的图形界面客户端

Source Tree用了很优雅的方式和直觉化的流程,让你很优雅的使用Git

基本上所有常用场景下,都可以胜任,如果实在情况特殊,使用命令行 

下面是Source Tree界面

Source Tree的设计符合直觉

这张图上面的图标,基本上是所有常用的操作了

Clone/New:Clone就是克隆,copy拷贝的另一种称呼,这里意思是从远程仓库,拷贝一个项目到本地 

Commit:大家一看就明白 

Checkout:没讲,简单的说,你保存了一个版本到暂存区,然后继续写,写着写着后悔了,挨个挨个改回去太麻烦,checkout就是从暂存区的一个保存版本还原到正在写的编辑器,这一点,看第一地图,红色的短的checkout描述的就是这个意思(checkout HEAD后面讲) 

Discard:丢弃 

Stash:保存你目前的所有状态,到一个特别的文件–>我个人觉得这个很常用,一会提到 

Add:把文件提到暂存区 

Fetch:看看地图,远程仓库拉去到仓库,目前打开的编辑器不会变化 

Pull:提过了 

Branch:分支,这个不讲,一般项目负责人负责 

Merge: 合并分支,同上

觉得难记没关系,SourceTree有中文界面可以挑

用英文,主要是和Git的命令,对应起来,有助于找规律 

下面一个框区,就是diff,比较代码不同的地方

红色是删掉的,标记为减号

绿色是添加的,标记为加号 

Source Tree实时帮你显示,所以diff这个命令压根不需要你敲 

现在了解完毕Git的工作流程

现在让我们用Source Tree走一遍

本篇文章就是在Github上建立的一个项目(如果不知道怎么做,轻查询Github官方教程)

然后clone到本地

把项目添加到了Source Tree

把项目添加到Source Tree

下面简称SourceTree为ST

然后用编辑器打开文件编辑,编辑完毕后,保存文件,这个一定要保存,然后可以把编辑器最小化了,然后可以看看ST

点击如图,第一步,工作副本

这个要经常点,只要你点了,切换就会刷新

稍微等一会,第二部的地方,就会出现文件的修改状态

第二部所在的区域,就是工作区,就是你编辑器,编辑器的文件临时状态,可以部分选,也可以全选,选择后,会出现如下图:

整个项目移动到上面,就是暂存区,右边是Diff状态,表示你修改了什么

提交按钮,就是Commit,点击他,进入下图:

如图会跳出一个commit信息,看过Git的同学,应该知道,每次commit都会让你键入一个message,其实就是写明,你做了什么,改了什么,这样子等到回退,撤销的时候,一看信息就明白了

下面有一个按钮,和上面的推送是一样的

可以先commit,然后push

如果仓库是配置好的 

按一下,就可以提交代码了 

提交好代码后,可以看到如图:

左边的分支,可以看到整体情况

右边的字段:

图表:一种分支图,可以看清项目合并情况

描述:就是commit的message

提交:提交生成的hash码

作者:谁提交的,这个团队配合作用救命掀了

真正的复杂的项目,上一张图,让大家感受下:

分支情况会特别的复杂,感受下。

小结

ST确实用图形界面把Git的操作简化到十分优雅的地步

Git提交代码的流程,已经描述完毕

是不是十分简单

后记

明天有活干了

关于如何撤销 

分支创建和合并 

还有团队合作策略(stash的应用),如何避免冲突 

这个有空再写

资源声明:图片来自于互联网

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

反馈

可以在issue中反馈,欢迎交流,共同进步

赞助



赠送2个学习git的网址:https://learngitbranching.js.org/?demo

https://unbug.github.io/codelf/


需要企业签的,联系QQ:807224386     微信:wx807224386

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

推荐阅读更多精彩内容