Git从入门到速成

什么是Git

Git是Linux发明者Linus开发的一款新时代的版本控制系统,那什么是版本控制系统呢?怎么理解?网上一大堆详细的介绍,但是大多枯燥乏味,对于新手也很难理解,这里我只举几个例子。

熟悉编程的都知道,我们在软件开发中源代码其实是最重要的,那么对源代码的管理变得异常重要:

  • 为了防止代码的丢失,肯定本地机器与远程服务器都要存放一份,而且还需要有一套机制让本地可以跟远程同步;
  • 我们开发的时候免不了有bug,有时候刚发布的功能就出现了严重的bug,这个时候需要对代码进行还原;
  • 随着我们版本迭代的功能越来越多,但是我们需要清除的知道历史每一个版本的代码更改记录,甚至知道每个人历史提交代码的情况

等等类似以上的情况,这些都是版本控制系统能解决的问题。所以说,版本控制是一种记录一个或者若干个文件内容变换,以便将来查阅特定版本修改情况的系统,对于软件开发领域来说版本控制是最重要的一个环节,而Git是当下比较流行、好用的版本控制系统。

Git安装

上面说了,Git是一个版本控制系统,你也可以理解成一个工具,跟Java类似,使用之前必须得先安装,所以第一步必须要安装,由于我用的是Mac,Mac上系统自带Git。所以安装这一步骤就省略,相信大家可以搞的定。

如何学习Git

安装好Git之后,怎么学习是个问题,其实关于Git有很多图形化的软件,但是我强烈建议大家从命令行开始学习理解,我知道没有接触过命令行的同学内心可能是拒绝的,但是我的亲身实践证明,只有一开始学习命令行,之后你对Git的每一步操作才能理解其意义,而等你熟练之后 ,你想用任何的图形化的软件去操作完全没有问题。

Git命令列表

怎么判断你Git有没有安装成功呢?请在命令行里输入git,如果出现以下提示证明你已经安装成功了。

Git所有的操作命令都是以git开头,上面列举了最常用的一些Git命令,紧接着会有一句引文解释这个命令的意思,都不是很难理解的单词,不妨试着看一下,不过没有实际操作你仍然不好理解,下面我们来以一个实际的操作来介绍下一些常用的命令的含义。

Git具体命令

第一步:我们先新建一个文件夹,在文件夹里新建一个文件(ps:我是用命令行去新建的)

  • 新建文件夹:mkdir test
  • 跳转到文件夹目录:cd test
  • 新建test.md文件: touch test.md

提醒:在进行任何Git操作之前,都要先切换到Git仓库目录,也就是要先切换到项目的文件夹目录下

这个时候我们先随便操作一个命令,比如git status,可以看到如下提示:

意思就是当前目录还不是一个Git仓库。

git init

这个时候用到了第一个命令,代表初始化git仓库,输入git init之后会提示:

可以看到初始化成功了,至此test目录已经是一个git仓库了。

git status

紧接着我们输入git status命令,会有如下提示:

默认就直接在master分支,关于分支的概念后面会提,这时最主要的是提示test.md这个文件 Untracked files就是说test.md这个文件还没有被跟踪,还没有提交在git仓库里呢,而且提示你可以用git add去操作你想要提交的文件。

git status这个命令就是查看状态,这个命令可以算是使用最频繁的了,建议大家没事就输入这个命令来查看你当前git仓库的一些状态。

git add

上面提示test.md文件还没有提交到git仓库里,这个时候我们可以随便编辑下test.md文件,然后输入git add test.md,然后再输入git status

此时提示以下文件 Changes to be committed,意思就是test.md文件等待被提交,当然你也可以使用 git rm -cached这个命令去移除这个缓存。

git commit

接着,我们输入 git commit -m "first commit",这个命令是什么意思呢?commit是提交的意思,-m 代表提交信息,执行了以上命令代表我们已经正式进行了第一次提交。这个时候再输入 git status ,会提示 nothing to commit

git log

这个时候,我们输入 git log命令,就会看到如下:

git log这个命令可以查看所有commit产生的记录,所以可以看到已经产生了一条commit记录,而提交时候的附带信息叫 “first commit”

git add & git commit

看到这里估计很多人都会有疑问,我想要提交直接进行commit不就行了么为什么需要先add一次呢?首先 git add 是把改动添加到一个暂存区,你可以理解成一个缓存区域,临时保存你的改动,而 git commit 才是最后真正的提交,当然也有办法把这两步合并成一步,不过后面再介绍,建议新手先按部就班的一步步来。

git branch

branch即分支的意思,分支的概念很重要,尤其是团队协作的时候,假设两个人都做同一个项目,这个时候分支就是保证两人能协同合作的最大力气了。

举个?:A、B两人都在做同一个项目,但是不同的模块,这个时候A新建了一个分支叫a,B新建了一个分支叫b,这样A、B做的所有代码改动都在各自的分支,互不影响,等到两人都把各自的模块都做完了,最后再统一把分支合并起来。

执行 git init初始化git仓库之后会默认生成一个主分支master,也是你所在的默认分支,也基本是实际开发正式环境下的分支,一般情况下master分支不会轻易直接在上面操作的,你们可以输入git branch查看下当前分支情况;如果我们想在此基础上新建一个分支呢,很简单,执行 git branch a就新建了一个名字叫a的分支,这时候分支a跟分支master是一模一样的内容,我们再输入git branch 查看当前的分支情况;

但是可以看到master分支前有个 * 号,(注意: * 所指的分支代表当前所在的分支) 即虽然新建了一个 a 的分支,但是当前所在的分支还是在master上,如果我们想在 a 分支上进行开发,首先要先切换到 a 分支上才行,所以下一步要切换分支。git checkout a 执行这个命令,然后再输入git branch查看分支情况,可以看到当前我们所在的分支已经是a了,这个时候,A同学就可以在他新建的a分支进行写代码了。 那就有人说了,我要先新建再切换,未免有点麻烦,有没有一步到位的,答案是肯定的: git checkout -b a这个命令代表的意思就是新建一个a分支,并且自动切换到a分支

git merge

A同学在a分支上代码写完了,并且测试也OK了,准备要上线了,这个时候就需要把他的代码合并到分支master上,然后发布。git merge就是合并分支用到的命令,这对这个情况,需要先做两步:

  • 第一步是切换到master分支,如果你已经在那就不用切换了
  • 第二步执行git merge a,意思就是把 a 分支的代码合并过来,不出意外,这个时候 a 分支的代码就顺利合并到master分支来了,为什么说不出意外呢?因为这个时候可能因为产生冲突而导致合并失败。

git branch -d

有新建分支,那肯定就有删除分支,加入这个分支新建错了,或者a分支的代码已经顺利合并到master分支来了,那么a分支没用了,需要删除,这个时候执行代码 git branch -d a 就可以把a分支删除了。

git branch -D

有些时候可能会删除失败,比如如果a分支的代码还没有合并到master分支,你执行 git branch -d a是删除不了的,它会智能的提示你a分支还有未合并的代码,但是如果你非要删除,那就执行 git branch -D a就可以强制删除a分支了。

git tag

我们在客户端开发的时候经常有版本的概念,比如v1.0、v1.1之类的,不同的版本肯定对应不同的代码,所以我们一般要给我们的代码加上标签,这样假设v1.1版本出了一个新bug,但是又不知道v1.0是不是有这个bug,有了标签就可以顺利切换到v1.0的代码,重新打个包测试就知道了。 所以如果想要新建一个标签很简单,比如 git tag v1.0就代表我在当前代码状态下新建了一个v1.0的标签,输入 git tag可以查看历史tag记录。

想要切换到某个tag怎么办? 也很简单,执行 git checkout v1.0这样就顺利的切换到v1.0 tag的代码状态了。

结束语

OK,以上全是一些最基本的git操作,而且全是在本地环境进行操作的,完全没有涉及到远程仓库。毕竟这篇文章是针对小白的,大神可以忽略。

附上一张git操作的图

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网技术栈

Tair数据迁移三步走

在多机房数据迁移中,整个过程分为三个阶段:历史数据迁移阶段、redolog迁移阶段、实时复制阶段。

1153
来自专栏源哥的专栏

开发统一的博客接口

现在博客很流行,很多人都在使用博客,有些人同时拥有几个不同的博客网站,不知你有没有这样的烦恼,就是你写了一篇文章,这时想传到不同的博客网站上去,就得打开不同的...

883
来自专栏后端技术探索

狼厂项目实践:通用检索框架准实时流的设计与实现

检索对实时性的要求很高,不仅是对索引建立、结果召回、策略干扰等核心部分,也包括数据录入的部分。检索的数据流主要包括全量数据与增量数据,其中全量数据是在运行前就已...

891
来自专栏企鹅号快讯

利用Django在前端展示Oracle 状态趋势

开发环境 操作系统:CentOS 7.4 Python版本 :3.6 Django版本: 1.10.5 操作系统用户:oms 数据处理:pandas 前端展示:...

3017
来自专栏LIN_ZONE

Nginx负载均衡的5种策略(转载)

本文转自:nginx负载均衡的5种策略(转载) 如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/9750970...

2801
来自专栏运维技术迷

chattr命令

chattr命令用来改变文件属性。这项指令可改变存放在ext2/3/4文件系统上的文件或目录属性。 一、文件或目录属性 1.1 属性 这些属性共有以下8种模式...

3425
来自专栏星汉技术

虚拟机:Linux系统安装

2747
来自专栏叔叔的博客

阿波罗配置中心的体验

这个好用,可以对部分实例进行灰度发布,比如对部分服务器的实例进行测试,观察一段时间没问题,再正式发布,就是体验服。

1284
来自专栏Python攻城狮

GitHub 系列之「Git速成」1.什么是Git?2.Git 安装3.Git 命令列表4.Git 具体命令

Git 是 Linux 发明者 Linus 开发的一款新时代的版本控制系统,那什么是版本控制系统呢?怎么理解?网上一大堆详细的介绍,但是大多枯燥乏味,对于新手也...

742
来自专栏大数据技术学习

零基础学习大数据,搭建Hadoop处理环境

由于Hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7,具体...

2467

扫码关注云+社区

领取腾讯云代金券