原本不打算写相关Git
系列教程,由于网上已有廖雪峰老师的《Git教程》,及扔物线老师的《Git原理及使用指南》,怕本身写很差,写不全,讲不清。但本身学习 Git 后,又按捺不住想写的冲动,因此最终我仍是动笔了。为了让初次接触 Git 的小伙伴快速上手,整个系列不打算深刻的讲解Git,而会将重心放在Git的经常使用概念及频率较高的Git命令。同时又由于笔者是一名爱岗敬业的Android程序员,因此在文章中,我也会介绍Git相关指令在 IntelliJ IDEA
与 Android Studio
图形化界面上的对应实现。java
总之,简单一句话来讲,整个系列文章能帮助你们,不只学到 Git 相关概念及 Git 相关命令的使用,还能熟悉图形化界面上的操做。装逼(论一个习惯命令行的程序员的自我修养),偷懒两不误~,还在等什么呢?少年!!!come on ~git
整个系列的文章,结合了相关视频与博客,在文章末尾或文章中都给出了相应学习连接。只有站在巨人的肩膀上,才能看的更远~程序员
在咱们进行深度学习 Git
以前,我想给你们讲个故事,时间回到咱们青春岁月的大学时代,在大四的小伙伴们,我相信你们都经历过毕业论文👨🎓的折磨。在无数遍咒骂导师的时候,咱们将毕业论文改了一遍又一遍。《毫不修改版本1》,《修改剁手版本1》,《打死不改版本》,《改了,导师挂全家版本》....等等,随着论文修改的版本次数增长与时间长短等其余缘由。咱们或许已经忘记在相应版本中,咱们添加了什么内容,删除了哪些语句。想要从不一样版本中找到咱们的历史记录,这是一项很是困难的事。算法
而版本控制系统
就能帮助咱们解决上述咱们遇到的问题。版本控制系统的主要目的是帮助你保留项目的详细历史记录,而且可以在不一样的版本上进行工做。保留详细的项目历史记录很重要,由于这样能够看出一段时间内项目的进度。若是须要,你还能够回到项目的某个阶段,并恢复数据或文件。shell
版本控制其实就是
控制版本
,版本控制系统就是帮助咱们控制或管理某个事物的不一样版本apache
如今市面上的控制系统有几十上百种,可是最为流行的版本控制系统为下面三者:安全
尽管有着不一样的版本控制系统,但其主要类别分为两种:服务器
在集中式模型中,有一台功能强大的中央服务器托管项目。每一个每户都必须经过这台中央服务器。网络
在分布式模型中,没有中央信息库,每一个开发者的计算机都有一份完整的项目拷贝。由于每台计算机都有完成的项目拷贝,这就意味着咱们能够离线工做,不受网络的限制了。框架
在该系列文章中,咱们将使用Git,它是分布式版本控制系统。你可能据说过 GitHub
, Git
和 GitHub
是彻底不一样的 Git 是版本控制工具。而 Github 是托管 Git 项目的服务,要使用 Git 项目,你未必要使用 GitHub 。可是 GitHub ,在后续文章中咱们也会讲到。如今就把它当作能够上传你的项目副本的另外一台计算机。若是如今没有理解集中式,分布式。也彻底没有关系。这里只是介绍一下他们运行的大概框架。
在学习Git以前,咱们有必要了解Git和版本控制术语,了解相关术语,有助于咱们更好的学习并使用Git。
版本控制系统(version control system 简称VCS
)是一个管理源代码不一样版本的工具。源代码管理器(source code management 简称 SCM
)是版本控制系统的另外一个名称。
Git 是一个 SCM(所以也是 VCS!)。Git 官方网站的 URL 是 Git-scm.com/(注意它的域名中直接包含“SCM”!)。
Git 将数据看作微型文件系统的一组快照。每次 commit(在 Git 中保持项目状态),它都对文件当时的情况拍照,并存储对该快照的引用。你能够将其看作游戏中的保存点,它会保存项目的文件和关于文件的全部信息。
你在 Git 中的全部操做都是帮助你进行 commit,所以 commit 是 Git 中的基本单位。
仓库是一个包含项目内容以及几个文件(在 Mac OS X 上默认地处于隐藏状态)的目录,用来与 Git 进行通讯。仓库能够存储在本地,或做为远程副本存储在其余计算机上。仓库是由 commit 构成的。
工做目录是你在计算机的文件系统中看到的文件。当你在代码编辑器中打开项目文件时,你是在工做目录中处理文件。
与这些文件造成对比的是保持在仓库中(在 commit 中!)的文件。
在使用 Git 时,工做目录与命令行工具的 current working directory (当前工做目录)不同,后者是 shell 当前正在查看的目录。
检出是指将仓库中的内容复制到工做目录下。
Git 目录下的一个文件,存储的是即将进入下个 commit 内容的信息。能够将暂存区看作准备工做台,Git 将在此区域获取下个 commit。暂存索引中的文件是准备添加到仓库中的文件。
SHA
是每一个 commit 的 ID 编号。如下是 commit 的 SHA 示例:
e2adf8ae3e2e4ed40add75cc44cf9d0a869afeb6。
复制代码
它是一个长 40 个字符的字符串(由 0–9 和 a–f 组成),并根据 Git 中的文件或目录结构的内容计算得出。SHA 的全称是"Secure Hash Algorithm"(安全哈希算法)。若是你想了解哈希算法,能够参考SHA家族。
分支是从主开发流程中分支出来的新的开发流程。这种分支开发流程能够在不更改主流程的状况下继续延伸下去。
回到以前关于游戏保存点的示例,你能够将分支看作在游戏中设立保存点后,尝试一个有风险的招式。若是有风险的招式不奏效,则回到保存的位置。令分支很是强大的关键之处是你能够在一个分支上设定保存点,而后切换到另外一个分支并继续设定保存点。
在Git的工做流程主要围绕三个部分,工做区,暂存区与仓库区。当你第一次在使用Git时,可能不太容易意识到有这三个不一样的区域。由于你并不会在计算机的文件中看到任何可见的修改。但Git的确管理者这三个区域。
在Git中若是你建立了一个空仓库,Git可以分辨从未见过的文件,如上图中的红色的A
文件,若是咱们须要经过Git来跟踪咱们的文件,咱们须要将文件添加到仓库中,可是咱们不能直接将这些文件直接移动到仓库区中。上述A文件必须先移动到暂存区,咱们可使用 git add
指令将A
文件更改移动到暂存区(暂存区能够存放全部即将
提交的文件)。当文件提交到暂存区中后,咱们可使用git cmomit
指令将A
文件移动到仓库区去。
关于
git add
与git commit
这两个指令,在接下来的文章中会进行讲解。须要注意的是只有暂存区的内容才会被提交到仓库中去。
一样的修改仓库中的文件,也须要先将修改的文件先添加到暂存区中,而后从暂存区提交到仓库。
若是说咱们想查看咱们的提交信息怎么办呢?针对每一个提交,Git都会为其建立一个 ID(SHA)
,每一个提交的ID,也就是SHA的前七个字符以下图所示:
站在巨人的肩膀上,才能看的更远~