Git简明教程

Git 是当前用的最多,最好用(应该没有争议吧?!)的分布式版本控制系统。git 的底层数据原理很复杂,但是上手 Git 却很简单。Git 不需要网就能够 commit(提交),这一点与 SVN 有着很大的差别,SVN 需要一个远程服务器,所有的 commit 都会直接到远程服务器,而 Git 则不需要, Git 可以有无数个远程服务器,也可以一个都不需要, Git 太棒了,使用了 Git 后,你再也不会想使用其他的版本管理工具。

其实不仅仅只是代码需要版本管理,文档,写作,知识库等等需要多人协作或者个人多次操作的工作都需要版本管理。

下面的内容不会涉及到任何 Git 原理性的东西,只会介绍 Git 的基本概念以及版本管理需要用到的常用命令。Git 的命令很多,加上每个命令有不同的参数,所以 Git 会让人感觉很难学,所以下面的内容会首先介绍最常用的命令,然后再介绍 Git 的一些高级用法。

由于不把 Git 的应用场景仅限于写代码,那我们就把需要版本管理的过程称之为创作。

注意:这篇文章用于学习基础的 Git 操作,不能帮助你成为一个 Git 专家

创作的四个阶段

  • 思路整理
  • 内容创作
  • 里程碑
  • 优化更新

创作的过程可以映射到 Git 的四个阶段中:

  • 项目初始化
  • 内容的 commit/push 与分支管理
  • Git 标签管理
  • 迭代

在开始一项创作之前,我们需要初始化一个 Git 项目来存放创作的相关文件,然后在项目里进行内容创作,每完成一部分内容就需要进行 commit 和 push。在完成一个阶段性的目标后,就需要打上一个版本号,宣告一个里程碑的诞生。然后在这个基础之上进行再次的创作和标签化。

Git 初级用法

Git 专用名词

  • 工作区
  • 暂存区
  • 本地仓库
  • 远程仓库

其实本地工作区、暂存区和本地仓库只是逻辑上的区分,对于 Git 的使用者来说基本是无感的,也就是说你记不住上面几个术语也不会影响使用。

Git 项目初始化

项目的初始化分为两种情况,一种是重头开始创建一个新项目,二是从远程服务器获取一个现有的项目

新建项目

1
2
$ mkdir project-name && cd project-name
$ git init

或者

1
$ git init project-name

拉取现有项目

可以直接从远程仓库拉取一个项目到本地进行协作,url 就是远程仓库的项目地址。

1
$ git clone url

当前 Git 使用的最多的远程协议是 https 和 ssh,使用 https 时需要手动输入远程服务器的账号和密码,相对比较麻烦,而使用 ssh 使用起来则更加方便一些。

Git 配置

Git 的配置分为当前项目配置全局配置,Git 会优先使用当前项目的配置,当前项目缺少的配置会使用全局的配置。

使用以下的命令查看和修改当前 Git 的配置:

1
2
3
4
5
# 查看配置
$ git config --list

# 修改配置,加上 --global 表示修改全局的配置
$ git config -e [--global]

user.nameuser.email 的配置需要单独说明,如果在项目中没有这两个配置,那么就会使用全局的配置,如果全局也没有,那就必须要配置,否则不能够进行提交。

1
2
3
# 配置 user.name 和 user.email,不加 --global 表示当前项目配置,加上 --global 表示全局配置
$ git config [--global] user.name "ray"
$ git config [--global] user.email "ray@gmail.com"

到这里,Git 项目的初始化就完成了。

内容的 commit/push 与分支管理

Git 的基本工作流

在创建了一个 Git 的项目之后,就可以在这个 Git 项目内进行创作了。

1
2
# 添加文件,可以向 Git 项目中添加任何文件
$ touch reade.md

在添加完文件后,这些文件还没有纳入到版本管理中,需要使用 以下的命令将新添加的文件纳入到暂存区中:

1
2
3
4
5
6
7
8
# 添加单个文件
$ git add file-name

# 添加 整个项目中的文件
$ git add .

# 查看文件变动状态
$ git status

然后需要将新增加的文件提交本地仓库:

1
$ git commit -m 'Message'

执行完这条命令后,就表示新增加的内容已经提交到本地的仓库了。如果这是一个多人协作的项目,那就还需要将这些新的内容提交到远程仓库。

1
2
# 如果当前项目还没有远程分支,那就需要添加一个, origin 是远程分支的名称,这个名称可以随意起
$ git remote add origin url

提交内容到远程仓库(这里涉及到一个分支的概念,下面马上讲到):

1
$ git push origin master

Git 分支管理

分支是 Git 的一个很重要的特性。在使用 git init进行项目初始化时,Git 会默认创建一个 master 分支。为什么 Git 需要多个不同的分支呢?设想一个场景,你用 Git 作为版本管理创作了一本书,这本书是基于 master 分支进行创作的。你已经完成了这本书的第一个版本并且对外发布了,然后你开始准备写这本书的第二个版本,如果你还继续在 master 分支上进行修改的话,那么就会影响到当前正在读这本书的读者,这个时候分支就能很好的解决这个问题。

只需要创建一个新的分支,然后新的工作在新分支上进行,而且不会影响原来分支上的内容,而且在新分支上的工作完成后,还可以直接将新的内容合并回原来的分支。

分支的新建:

1
2
3
4
5
 # 新建一个分支
$ git branch branch-name

# 新建一个分支并且切换到新的分支
$ git checkout -b branch-name

分支基本操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看本地分支
$ git branch

# 查看远程分支
$ git branch -r

# 查看本地和远程的所有分支
$ git branch -a

# 切换分支
$ git checkout branch-name

# 删除本地分支
$ git branch -d branch-name

# 删除远程分支
$ git push origin --delete branch-name
$ git branch -dr remote/branch-name

上面这些操作就是分支的基本操作了,学会了这些操作,就可以很方便的管理自己的创作状态,并且彼此不会相互影响。但是还有一个问题没有解决,那就是如果想把两个分支的内容合并到一起该怎么操作,很简单,如下:

1
2
# 把其他分支的内容合并到当前分支
$ git merge branch-name

Git 标签管理

在经过了很多次的 commit 和 push 后,你觉得创作的差不多了,是时候发布这些内容了。为了让这次发布的内容可以在以后很方便的找到,那就需要在当前这个点上打上一个标签,Git 会维护一个 标签列表,打过的标签都可以轻易的找到。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建一个分支
$ git tag tag-name

# 查看当前的所有tag
$ git tag

# 删除本地分支
$ git tag - d tag-name

# 提交分支
$ git push origin tag-name

# 删除远程分支
$ git push origin --delete tag-name

学会了这些命令后,就可以轻松的操作 git 的标签了。

迭代

Git 的命令的数量很大,每个命令又可以有很多的参数,所以不太可能记住所有的参数。 所以学习 Git 最好的方式就是用,先从基本的命令开始,在使用的创作中将 Git 使用起来,然后再进一步去探究 Git 内部的原理。

上面介绍的命令基本已经够日常的使用了,你可以用这些工具去帮助你不断的优化自己的创作。当你可以把这些命令练成自己的本能反应时,你会对 Git 的高阶用法和内部原理感兴趣的。

(完)

  • https://github.com/progit
  • http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

微信公众号

© 2018 ray