一篇文章学会Git

在日常工作中, 经常会用到Git操作, 但是对于新人来讲, 刚上来对Git很陌生, 操作起来也很困难. 本篇主要针对刚开始接触Git的新人, 理解Git的基本原理, 掌握常用的一些命令.

image.png

Git工作流程

image.png

以上包括一些简单而常用的命令, 可以先不用关注这些, 先来了解下面这几个专有名词.

  • Workspace: 工作区
  • Index / Stage: 暂存区
  • Repository: 仓库区(或本地仓库)
  • Remote: 远程仓库

1. 工作区(Workspace)

程序员进行开发改动的地方, 是你当前看到的, 也是最新的.

平常我们开发就是拷贝远程仓库中的一个分支, 基于这个分支进行开发, 在开发过程中就是对工作区的操作.

2. 暂存区(Stage)

.git目录下的index文件, 暂存区会记录git add添加文件的相关信息(文件名, 大小, timestamp...), 不保存文件实体, 通过id指向每个文件实体, 可以使用git status查看暂存区的状态. 暂存区标记了你当前工作区中, 哪些内容是被git管理的.

当你完成某个需求或功能后, 需要提交到远程仓库, 那么第一步就是通过git add先提交到暂存区, 被git管理

3. 本地仓库(Repository)

保存了对象被提交过的各个版本, 比起工作区和暂存区的内容, 它要更旧一些.

git commit后同步index的目录树到本地仓库, 方便下一步通过git push同步本地仓库与远程仓库.

4. 远程仓库(Remote)

远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改, 因此它可能与本地仓库同步, 也可能不同步, 但是它的内容是最旧的.

小结:

  1. 任何对象都是工作区中诞生和被修改
  2. 任何修改都是从进入index区才开始被版本控制
  3. 只有把修改提交到本地仓库, 该修改才能在仓库中留下痕迹
  4. 与协作者分享本地的修改, 可以把它们push到远程仓库来共享.

下面这幅图更加直接描述了四个区域之间的关系, 要能有些命令不太清楚, 没关系, 下面会详细进行介绍:


image.png

Git常用命令

image

1. HEAD

image

在掌握具体命令前, 先理解下HEAD

HEAD, 它始终指向当前所处分支的最新的提交点, 你所处的分支变化了, 或者产生了新的提交点, HEAD就会跟着改变.

2. add

image

add 相关命令很简单, 主要实现将工作区修改的内容提交到暂存区, 交由git管理


image

3. commit

image

commit相关命令也很简单,主要实现将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。


image

4. branch

image

涉及到协作, 自然会涉及到分支, 关于分支, 大概有展示分支, 切换分支, 创建分支, 删除分支这四种操作.

image

5. merge

image

merge命令把不同的分支合并起来, 发上图, 在实际开发中, 我们可能从master分支中切出一个分支, 然后进行开发完成需求, 中间经过R3, R4, R5的commitynvi,最后开发完成需要合并入master中, 这使用到了merge.


image

一般在merge之后,会出现conflict,需要针对冲突情况,手动解除冲突。主要是因为两个用户修改了同一文件的同一块区域。如下图所示,需要手动解除。


image

6. rebase

image

rebase又称为衍合,是合并的另外一种选择。

在开始阶段,我们处于new分支上,执行 git rebase dev,那么new分支上新的commit都在master分支上重演一遍,最后checkout切换回到new分支。这一点与merge是一样的,合并前后所处的分支并没有改变。 git rebase dev,通俗的解释就是new分支想站在dev的肩膀上继续下去。rebase也需要手动解决冲突。

7. rebase与merge的区别

现在, 我们有这样两个分支, test和master, 提交如下:

 D---E test
 /
A---B---C---F master

在master执行 git merge test,然后会得到如下结果:

 D--------E
 / 
A---B---C---F----G test, master

在master执行 git rebase test, 然后得到如下结果:

A---B---D---E---C'---F' test, master

可以看到, merge操作会生成一个新的节点, 之前的提交分开显示, 而rebase操作不会生成新的节点, 是将两个分支融合成一个线性的提交.

如果你想要一个干净的, 没有merge commit的线性历史树, 那么你应该选择git rebase, 如果你想保留完整的历史记录, 并且想要避免重写commit history的风险, 你应该选择使用git merge

8. reset

image

reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。


image

9. revert

image

git revert用一个新提交来消除一个历史提交所做的任何修改。

10. revert与reset的区别

image
  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。关于这一点,不太理解的继续研究下。
  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

11. push

上传本地仓库分支到远程仓库分支,实现同步。


image

12. 其他命令

image

本文摘至网络

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