Git知识简介

介绍

    Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。git是个工具,在linux里面也就类似gcc这样的工具一样,是一个shell命令。

Git与GitHub区别

  • Git是版本控制工具
  • Github是一个平台,提供给用户创建git仓储空间,保存(托管)用户的一些数据文档或者代码等。

Git与CVS、SVN的区别

  • Git是分布式版本控制系统,代码提交是在本地的(如此速度就快),当然生成补丁(patch)然后push到远程服务器上是需要联网的
  • CVS、SVN是集中式版本控制系统,代码提交都是提交到远程服务器上
  • CVS、SVN这样的集中式版本控制系统,它的完整代码仓库(代码仓库不仅仅只包含了代码,还包含各个历史版本的信息等)在中心服务器上,一旦这个中心服务器挂了,也就是完整的代码仓库挂了</li>
  • Git没有中心服务器的概念,每一个git客户端(git节点)都含有一个完整的代码仓库(前提是你之前从远程git仓库fetch过代码)

远程仓库、工作区、版本库和暂存区

远程仓库

    就是在github或者在gitlab上的代码。可以用git pullgit push来进行本地仓库和远程仓库的同步操作

工作区(Working Directory)

    从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录,也就是工作区

版本库(Repository)

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

暂存区(Stage)

    暂存区就是版本库中的一个区域,具体参见上面的结构图

工作区、版本库、暂存区之间的关系
  1. 使用git add把文件从工作区添加到版本库中的暂存区,git add命令可以多次用,或者使用git add file1 file2 ...
  2. 使用git commit提交代码,就是把暂存区的所有内容提交到当前分支
  3. 需要提交的文件修改通通放到暂存区(可能有多次的git add),然后,一次性提交暂存区的所有修改到当前分支(git commit)

版本回退

    前提条件:已经执行git commit命令了,但是没有push到远程仓库,用以下命令可以回退
    其实这个回退就是将本地的HEAD指针移动到某个版本上而已,所以这个操作是非常快的。

回退到上一个版本
  • 在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  • 版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
回退到未来的某个版本
  • 使用git log命令查看提交记录,找到需要回退版本的commit id
  • 如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

git log则不能查看已经删除了的commit记录

总结
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本

git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉

撤销修改

含义

    命令git checkout -- file意思就是,把file文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。
场景
  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作</li>
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,版本回退一节,不过前提是没有推送到远程库

git stash

    场景:当你接到一个修复一个代号101的bug的任务时,你想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没有提交,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash list

    查看暂存区的所有暂存修改记录

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
git stash apply stash@{X}

    取出相应的暂存

git stash drop stash@{X}

    将记录列表中取出的对应暂存记录删除

git stash pop(推荐)

    取出最近一次暂存并删除记录列表中对应记录

分支管理

命令 含义
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建+切换分支
git merge <name> 合并某分支到当前分支
git branch -d <name> 删除分支
Bug分支

    在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

Feature分支

    添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

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

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,887评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,921评论 0 11
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,529评论 0 13
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,707评论 1 17
  • 111111
    生气呢阅读 186评论 0 0