文章目录
Git再入门
Git是什么
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git是一个分布式的版本控制系统,它能快速、高效的管理或大或小的项目,言简意赅的介绍里有两个重要的词:分布式
和版本控制系统
,解释了Git是什么和Git有什么特点。
版本控制系统(VCS)
版本控制系统有两项基本的功能:文件操作历史追溯和文件同步。它记录了文件从创建到修改再到删除等操作的整个生命周期。软件开发是一个多人分工协作的过程,这个过程中可能需要基于团队中其他成员的成果进行开发,也有可能需要合入新的需求,同步功能可以使团队中所有成员在相同的基础上进行开发,从而节约开发成本。
Git的特点
Git是一个分布式的版本控制系统,与集中式的版本控制系统(例如:svn)的显著区别是服务器端和客户端都有完整的版本库,脱离服务器(例如:断网)环境下照样也可以做版本管理,并且查看操作历史和切换分支时都不需要与远程仓库交互,只有在需要与服务器进行同步时才需要与服务器建立连接。
Git代码管理的一般工作流程
在日常工作中我们的开发流程大致是这样的:首先从远程仓库拉取代码或者直接在本地创建一个本地仓库,接着按照需求文档编写代码,在经过不断的修改和调试后,最后把本地代码推送到远程仓库,概括起来主要有以下8类操作:
1 同步操作
- 从远程仓库拉取
- 推送本地最新代码到远程仓库
2 提交操作
- 本地修改后提交到本地仓库
3 查询操作
- 查询提交日志
- 查询本地的操作日志
- 对比代码差异
4 撤销操作
- 撤销修改
- 撤销提交
5 分支操作
- 新建分支
- 删除分支
- 合并分支
6 标签操作
- 创建标签
- 删除标签
- 推送标签
- 查看标签
7 冲突解决
- merge后,对于git不能自动解决的冲突,需要人工干预
8 补丁操作
- 修改bug后提交到本地仓库,并推送到远程仓库
Git 工作原理
一个文件在 Git 中被管理时有四种种状态以及对应所处的三种工作区域,理解这一特性将有助于我们更好的理解 Git 的常用命令的原理。在随后的 Git 操作介绍中,也会经常提到文件的各种状态变化和所处的工作区域。
文件的四种状态
- 未追踪(
Untracked
): 表示文件没有被Git管理 - 已修改(
Modified
):已被追踪的文件被修改了,但还没有提交到版本库 - 已暂存(
Staged
):表示将修改保存到暂存区(Staging Area) - 已提交(
Committed
):表示已经将修改提交至版本库中
三个区域
- 工作目录(
Working Directory
):工作目录是我们常用的使用或修改代码的目录。在工作目录的修改如果未添加到暂存区,那么该修改仍处在已修改状态。 - 暂存区域(
Staging Area
):当我们在工作目录中修改了文件,我们需要先将修改添加到暂存区。暂存区的修改就是已暂存状态。 - Git仓库目录(
.git directory
):Git 仓库目录就是真正存储和管理代码库的目录。提交修改到代码库本质上就是将暂存区的修改提交(commit)到代码库中
下图即是四种状态在三个区域中转移的示意图:
为何有一个暂存区
暂存区是 Git 另一个区别于传统版本控制系统的概念之一。传统的版本控制系统例如 SVN、Perforce,提交代码时直接将修改提交到了代码库中。暂存区相当于在工作目录和代码仓库之间建立了一个缓冲区,在真正 commit 之前,我们可以做任意的修改,先将修改保存到暂存区,待所有修改完成之后就可以将其完整的 commit 进代码库,这样可以保证提交的历史是干净清晰的;保存到暂存区的修改也可以被撤销,而不会影响到现有的版本库和提交历史。暂存区另一个作用是在进行多分支工作时,我们常常在某一分支上进行了修改,但又不想提交到代码库中,这时候我们可以使用 git stash 命令将暂存的和未暂存的修改保存到一个缓冲栈里,使得当前工作分支恢复到干净的状态;待我们想再次恢复工作时,只需要将缓冲栈的修改恢复到暂存区即可。
.git目录
在分析.git目录前,我们先来确认一下系统环境和Git软件版本:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
C