一张白纸——Git基础命令行小结(彻底告别GUI)

前言

作为一个Android开发者,乃至任何一个开发人员,在工作和学习的过程中,或多或少都会接触并使用到版本控制工具,从最初的SVN小乌龟,到后来的SourceTree……然而,仅仅会操作GUI,界面是友好了,但是对理解Git的状态和原理却是一种阻碍,另外,如果不使用命令行,出门都不好意思和人打招呼,命令行界面虽然黑灯瞎火,但是使用起来确实方便,也会在面试时帮助自己提高点“印象分”,所以,不论面子还是里子,命令行都有必要掌握。OK,闲话先到这儿,下面开始介绍Git的一些基础知识……


一、Git的特点

1.Git作为Linux之父Linus的亲儿子,基本上用法和其余的shell命令行的用法是一致的,而其与其他版本控制工具的差别在与Git只关心数据的整体是否发生变化,不再聚焦文件内容的具体差异,更像是一个小型的文件系统,以快照的形式做保存,并且基本上所有的操作都是本地执行,无需请求网络,这样就保证了你不管身处何处,网速有多烂,都能够使用Git进行版本控制。

2.所有保存在Git数据库中的东西都是用SHA1算法计算出来的哈希值来作为文件的索引,而不是用文件名作为文件索引。SHA1值为何物?形如这么一坨东西↓

2620951873387E84176AD4984AB5B07C2AF42300

由一个40位的16进制的字符组成。

不单单Git对于文件的操作完全依赖与它,包括Android App打包签名(指纹证书),集成一些厂商的第三方SDK(用来与包名拼接生成AppKey),都会用到这个东西。而它在此处,就是Git目录下每个文件的索引值。

二、Git文件的三种状态

对于任何一个文件,在Git内都只有三种状态:已修改,已暂存,已提交。相对应的,三种状态的文件分别存放在三个目录下:工作目录(working directory),暂存区域(staging area),git仓库(git repository),抛开那些犬牙交错纷繁复杂的概念,只需要牢记一点:

仅仅修改了项目中的某一文件,什么都没做——已修改状态,对应存放在工作目录下

修改了项目中的某一文件,并且执行了git add 命令——已暂存状态,对应存放在暂存区域下

修改了项目中的某一文件,既执行了git add,又执行了git commit——已提交状态,对应的存放在git仓库下

三、Git下载/安装/运行(以windows 10操作系统为例)

首先打开某度,搜索git,通常在首页中就能看到一个很醒目的条目,

Paste_Image.png

然后,下载——安装——选好制定本地的目录——狂点下一步——安装完毕(此处省略若干张图)

下载好了之后,打开安装的目录点击↓

Paste_Image.png

注意是点击bash.exe,至于下面那个cmd.exe,忘掉它,因为bash是linux下的命令行,即便将来换了Mac,或者Linux系统,此套命令行依然通用,真正做到了learn once, write anywhere

运行后的界面……(缩短篇幅,此处不截图了,黑灯瞎火什么都没有,请自动脑补)

四、Git基本命令

1.配置——git config

输入上述命令后,可以看到git全部的配置信息以及对应的命令↓

Paste_Image.png

好,我们挑重点说,

git config --global user.name "myname"

git config --global user.email yangyirunning@163.com

这两条全局的配置信息很重要,每次Git提交的时候都会引用这两条信息,会随更新内容一起被永久纳入历史记录。其他的配置(诸如高亮显示,别名等),默认即可,这里不展开论述。

2.初始化——git init

首先cd到你想建立git的文件夹下,一般推荐项目路径或者是空文件夹,输入上述命令,这里以我的Android项目的所在目录为例↓

Paste_Image.png

上图所示即为成功,运行之后在此路径的根目录下,会产生一个隐藏的.git文件夹,关于git的一切文件,都保存在这个文件夹内

3.状态——git status

输入上述命令↓

Paste_Image.png

就可以看到当前的git状态以及我们可以进行的操作

红色部分表示当前目录下的文件均处于没有暂存的状态。

4.添加到追踪列表——git add

只有通过git add 添加了的文件才会被版本控制管理

add命令最为常用的有如下两种:

git add 文件名

git add .

前者是添加某个文件,后者是添加该目录下的所有文件,这里我们以前者带参数的用法为例↓

Paste_Image.png

我们可以看到,当添加了EventBus文件后我们在通过查看状态得知,在根节点master下,EventBus文件已经被暂存了每当项目当中的文件修改后,都应该执行add命令和status命令,用来知晓修改的文件是否暂存成功。如果不小心手抖添加错了,也仍然可以用git rm --cached 文件名移除,当然了,这里的移除仅仅是从git的暂存目录下删除,完全不用担心本地目录下的文件被自己“误删”。

5.提交——git commit

使用add命令暂存后,文件这时已经被添加到了追踪列表(通常在项目开发完一个任务之后),这时将代码提交到你的git仓库,实现真正的提交↓

通常提交有两种命令:

git commit -m "说明信息"

**git commit **

前者适合与提交简短信息,后者适合提交长篇幅的信息,因为后者会自动打开一个编辑器。

我们以第一种为例↓

Paste_Image.png

当我们通过查看状态看到最后一行的“nothing added to commit……”时,就意味着提交成功了。

6.日志——git log

Paste_Image.png

通过键入“git log”命令我们就可以看到之前提交的历史记录了,作者,时间等信息

7.克隆——git clone

我们在学习和工作的过程中经常会download一些github上的开源项目,这里以事件总线EventBus(事件传递超级神器,我超爱它)为例,通过如下命令可以直接将项目下载到你的文件路径之下↓

git clone https://github.com/greenrobot/EventBus

这样就可以避免每次都通过浏览器打开github再慢悠悠的点击download zip这样的繁琐操作了(因为目录中已经将EventBus下载到本地,故截图省略)

8.不同分支——git branch

如果大家留意的话,可以看到上方每一个命令行的末尾总是显示一个master,这其实是分支名,当初始化git时,git会默认创建一个名为master的分支,我们所进行的惭怍也会在master分支下进行,不同分支之间互不影响,所以当开发一个新的功能时,就可以创建一个新的分支,当开发完此功能后,再将分支合并

创建一个分支:

git branch 分支名

Paste_Image.png

删除一个分支:

git branch -D 分支名

Paste_Image.png

9.切换分支/回滚操作——git checkout

以我们上方所创建的分支fuck为例,如果想从默认的分支master切换到新建的分支fuck,可以用如下命令↓

git checkout fuck

Paste_Image.png

可以看到,*号已经移到了fuck分支的前面,说明我们切换成功了

checkout还有一个常用的用法就是文件回滚,即文件放弃修改,退回到修改之前的状态,命令如下↓

git checkout 文件名

经过此命令之后,该文件名对应的文件已经退回到了修改之前的状态了

10.合并分支——git merge

比方说当初我为一个功能能够独立开发,为了不影响其他的分支而单独创建了一个分支(名叫fuck),现在我的这个功能开发完了,需要整个到项目中去,一并提交到git仓库,这时我就可以通过如下命令合并分支↓

git merge 分支名

Paste_Image.png

在合并fuck分支之前,应该先切换回master分支,然后再执行上述命令,如果没有冲突,那么master分支将会和fuck分支合并,合并后,master分支也就有了fuck分支下的所有功能了

注意在合并分支之前,一定要先检查,文件是否有冲突,冲突的成因是因为有多个开发者修改了同一个文件的相同地方导致,使得git系统不知道以谁的为准,此时就需要开发人员自己来抉择,选择其中的一份代码,并且将其他的代码删除,代码合并的操作都可能有冲突,原因也是同时修改了文件中的同一处代码段。

在通过自己的抉择二选一之后,重新add和commit提交代码即可。

11.为版本打标签——git tag

通常在完成了所有的功能之后,都会为每个正式发布的版本创建一个标签,这样便于后续版本的检索和维护。

相关的命令↓

创建标签

git tag -a v1.0.1 -m "第一版"

删除标签

git tag -d v1.0.1

显示标签对应的信息

git show v1.0.1

3个命令的效果↓

Paste_Image.png

12.帮助——git help

好了,在日常的开发中,使用到的基本的命令就上述这些,已经一一进行过论述,而当你想要继续了解某一个命令的更为详细的信息是,可以使用↓

git help

git help 具体的命令

Paste_Image.png

后者会打开默认打开一个网页,里面有关于此命令(以tag为例)的所有详细信息,参阅即可。↓

Paste_Image.png

(以上,Git基本的命令差不多就这些)


结束语

因为时间和篇幅的关系,这篇文章并没有画下句点,正在看的你如果对Git还有其他的更加高深或者相见恨晚的操作,欢迎留言补充。衷心希望这篇文章对大家有帮助。

参考文献:《Android开发进阶从小工到专家》 何红辉著

版权声明:本文出自yangyi的博客,转载请注明出处。

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

推荐阅读更多精彩内容