给测试小姐姐讲git命令

测试:你来给我讲讲git吧,我一直想了解一下git

me:你不是会用git么

测试:呃,只是能用,其实不知道怎么回事

me:好吧,那我就跟你讲讲,这个git啊,它...
me:这我不知道从哪开始讲起啊,要不你说说你想听点什么吧

测试:比如我们常用的pull,push,rebase和merge命令,我就一直不太明白push和rebase还有merge的区别

me:看来你是真的不明白,一般人都会问rebase和merge的区别。那我就从pull和push开始说吧,你知道git分本地和远程仓库么

测试:这个知道的,之前有人跟我讲过git分成本地文件,本地仓库和远程仓库

me:没毛病,为了方便后面跟你讲的东西,我先复习一下

几个文件分布

  • (working copy)工作区:就是本地文件,这也是你真正改代码的地方,其实你可以认为它和git还没啥关系
  • (stagging)暂存区:是本地文件和本地仓库的中间地带,你可以认为在这个地方的文件就是即将要提交到git仓库的
  • (local repo)本地仓库:这个是你机器上的git仓库,你可以把它理解为游戏存档
  • (remote repo)远端仓库:这个是真·git仓库,你可以把它理解成上传到服务器上可以和别人共用的游戏存档

测试:这个stagging是个什么东西,我怎么没听说过?

me:别急,还没复习完,我们再来复习一下平常用的最多的几个命令

各区域交互流程

  • git add .:add命令负责把工作区的文件添加到暂存区,我想很多人都喜欢这么玩,毕竟这么玩最方便,不过我不会用git命令,我都是用工具的,所以我不这么玩。喜欢用命令的话可以去翻翻官网的add命令教程,反正我不看
  • git commit -m "add README.md": commit 命令把暂存区的数据提交到本地仓库,之前说过我喜欢用工具,所以也不会这个命令,有兴趣的可以去看官网...
  • git push: push命令把本地仓库的数据推到远端仓库,push命令的玩法还挺多的,但是还是同上,我不会,看官网
  • git pull: pull命令把远端仓库的代码拉取到本地仓库,官网~

测试:哦,我说怎么每次commit之前都要add一下,原来是这样,commit只会提交暂存区的数据对吧

me:可以这么理解,不过commit也可以通过 -a参数来隐式调用add,比如‘git commit –a –m "add README.md"’就相当于“git add .”和“git commit -m "add README.md"”,

测试:好的我知道了,那merge和rebase呢

merge和reabse的区别

image.png

me:比如你现在拉一个feature分支改了代码(4,5),正准备合并到上去,但是这时候发现别人已经提交了一个版本(3)上去了,这个时候如果没有merge和rebase操作,你该怎么办呢

测试:。。。

me: 你看这样行不行,我把自己本地的改动全部删掉,然后从新冲远端进行一次pull操作,更新成最新的代码,然后再重新改一次。

测试:那多麻烦,而且我也不记得改过写什么了...

me:我只是做一个假设,其实你可以认为rebase就是再做这个事情


rebase

me:还有另一种方案,我进行一次新的提交,把远端和和自己改的合并到一起,像这样


merge

测试:所以这就是merge对吧

me:嗯,这就是merge做的事情。当然merge和rebase都是基于branch,或者准确的说是基于commit的,这里虽然说是同一个分支,但是远端和本地其实是有不同的版本的

测试:好的,那之前他们说的把commit合成一个是什么意思

rebase -i合成commit

me:还是之前的例子,你进行了两次commit(4和5),但是现在你发现其实这两次提交你在做同一个事情,只是花了比较长的时间,不得不分两次提交,那么现在你想把它搞成一次提交怎么办呢

me:如果是我,我就会把本地的全给删了,然后重新把所有的修改重新做一次,然后只commit一次

测试:哦!懂了,这就是rebase做的事情是吧

me:是的,你可以这么理解,但是rebase这个命令有点复杂,我们一般会使用--interactive指令来在rebase操作中对每个commit进行处理。每个commit我们都可以进行以下处理

  • pick:表示这次提交在rebase之后会被完整保留下来,包括注释
  • reword:表示这次提交在rebase之后会被保留下来,但不包括注释
  • squash:表示这次提交会被合并到前一次提交里面去
  • edit:我没用过,据说可以在同一个commit id下改代码,不看
  • fixup:没用过,据说和squash差不多,不看
  • exec:什么鬼,不看

测试:还有这么厉害的操作啊,我抽时间去看看

me:还有什么想知道的么

测试:嗯...对了,还有个reset,这个是什么意思

reset命令

me:reset命令用来回滚你当前分支的提交,你可以把它理解为rollback

测试:这个我知道,那我看他们用reset的时候喜欢后面跟一个--hard是什么意思

me:好问题!其实reset回滚有三种级别soft,mixed和hard,你应该还记得我之前提过的工作区、暂存区和本地仓库的概念。首先你要明确,reset命令是会回滚本地仓库的版本的,然后再来看这三个回滚级别有啥区别

  1. soft:听名字就知道这个回滚是很软的~,这种情况会回滚仓库中的版本,但是你修改过的文件会保留到工作区和暂存区,就是说你回滚了仓库代码,但是你打开编译器发现代码还是最新的,然后你commit一下它又和reset之前一样了
  2. hard:这是很强硬的回滚!这种情况会回滚你的分支版本、暂存区和工作区,就是说不管你本地的修改,还是被add到暂存区的东西,还是commit的东西,都没有了
  3. mixed:这个就是上面两个的折衷了,这种情况会回滚你的分支版本和暂存区,但是你修改过的文件还会保留到工作区,就是说你打开编译器发现代码还是最新的,然后通过add和commit操作又可以变会reset之前的样子

Tips

这些命令都没有这么简单

  这里讲到了add、commit、push、pull、merge、rebase、reset这些命令,我只是简单提了一下最常用的用法,但是这些命令本身是有点复杂的(毕竟官网一个命令就可以写好几页),有兴趣的可以去具体了解一下,反正我不看,太麻烦

工具是个好东西

  人,能制造工具并能熟练使用工具进行劳动的高等动物,这是新华字典说的,不是我说的。
  我觉得git命令还好,但是使用命令行来进行诸如diff、rebase之类的操作,实在有点反人类,工作中多用用工具还是很能提高效率的。比如JetBrains那一套里面集成的git工具,eclipse里面集成的git工具,tortoise git,source tree,这些都不错(我都用过,最喜欢JetBrains全家桶,虽然我用eclipse写代码)
  当然,学习的时候,用一用命令会让你对这些动作又更清晰的认知

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

推荐阅读更多精彩内容