Git再入门

本文深入介绍了Git,一个高效、分布式的版本控制系统。阐述了Git的特点,如离线操作和快速同步,并详细解析了Git的工作流程,包括文件的四种状态、暂存区的作用。此外,还详细探讨了Git的内部机制,如Git仓库目录的结构、blob、tree和commit对象之间的关系,以及Git为何被视为全量备份的原因。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值