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 项目初始化
项目的初始化分为两种情况,一种是重头开始创建一个新项目,二是从远程服务器获取一个现有的项目。
新建项目
$ mkdir project-name && cd project-name
$ git init
或者
$ git init project-name
拉取现有项目
可以直接从远程仓库拉取一个项目到本地进行协作,url 就是远程仓库的项目地址。
$ git clone url
当前 Git 使用的最多的远程协议是 https 和 ssh,使用 https 时需要手动输入远程服务器的账号和密码,相对比较麻烦,而使用 ssh 使用起来则更加方便一些。
Git 配置
Git 的配置分为当前项目配置 和全局配置,Git 会优先使用当前项目的配置,当前项目缺少的配置会使用全局的配置。
使用以下的命令查看和修改当前 Git 的配置:
# 查看配置
$ git config --list
# 修改配置,加上 --global 表示修改全局的配置
$ git config -e [--global]
有 user.name 和 user.email 的配置需要单独说明,如果在项目中没有这两个配置,那么就会使用全局的配置,如果全局也没有,那就必须要配置,否则不能够进行提交。
# 配置 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 项目内进行创作了。
# 添加文件,可以向 Git 项目中添加任何文件
$ touch reade.md
在添加完文件后,这些文件还没有纳入到版本管理中,需要使用 以下的命令将新添加的文件纳入到暂存区中:
# 添加单个文件
$ git add file-name
# 添加 整个项目中的文件
$ git add .
# 查看文件变动状态
$ git status
然后需要将新增加的文件提交本地仓库:
$ git commit -m 'Message'
执行完这条命令后,就表示新增加的内容已经提交到本地的仓库了。如果这是一个多人协作的项目,那就还需要将这些新的内容提交到远程仓库。
# 如果当前项目还没有远程分支,那就需要添加一个, origin 是远程分支的名称,这个名称可以随意起
$ git remote add origin url
提交内容到远程仓库(这里涉及到一个分支的概念,下面马上讲到):
$ git push origin master
Git 分支管理
分支是 Git 的一个很重要的特性。在使用 git init进行项目初始化时,Git 会默认创建一个 master 分支。为什么 Git 需要多个不同的分支呢?设想一个场景,你用 Git 作为版本管理创作了一本书,这本书是基于 master 分支进行创作的。你已经完成了这本书的第一个版本并且对外发布了,然后你开始准备写这本书的第二个版本,如果你还继续在 master 分支上进行修改的话,那么就会影响到当前正在读这本书的读者,这个时候分支就能很好的解决这个问题。
只需要创建一个新的分支,然后新的工作在新分支上进行,而且不会影响原来分支上的内容,而且在新分支上的工作完成后,还可以直接将新的内容合并回原来的分支。
分支的新建:
# 新建一个分支
$ git branch branch-name
# 新建一个分支并且切换到新的分支
$ git checkout -b branch-name
分支基本操作:
# 查看本地分支
$ 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
上面这些操作就是分支的基本操作了,学会了这些操作,就可以很方便的管理自己的创作状态,并且彼此不会相互影响。但是还有一个问题没有解决,那就是如果想把两个分支的内容合并到一起该怎么操作,很简单,如下:
# 把其他分支的内容合并到当前分支
$ git merge branch-name
Git 标签管理
在经过了很多次的 commit 和 push 后,你觉得创作的差不多了,是时候发布这些内容了。为了让这次发布的内容可以在以后很方便的找到,那就需要在当前这个点上打上一个标签,Git 会维护一个 标签列表,打过的标签都可以轻易的找到。
# 新建一个分支
$ 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 的高阶用法和内部原理感兴趣的。
(完)