Git知识梳理

前言

本文不算专业教程,只是对Git的基础知识和常用功能做梳理,以满足日常开发的需求。

概述

Git是什么:分布式版本控制系统。

版本控制系统是什么:版本控制系统是一个能够记录文件变更以及支持多人协同工作的软件。

  • 记录文件变更:比如记录谁在什么时候修改了文件的什么内容,可以查阅每次变更的内容,也可以将文件内容回退到某次变更。
  • 多人协同工作:即支持并行开发。

分布式是什么:
相比较于集中式而言,集中式如SVN,服务器作为中央处理器,只有服务器上面的版本库才是真正完整的,每个人的电脑上只记录着最新的文件内容。这有两个弊端,首先,一旦服务器的版本库丢失,就只能找到最后的文件内容,找不到整个文件变化历史。其次,一旦服务器停止工作,任何一台电脑都无法提交对文件的改动,协同工作就会停止。

分布式系统,个人电脑在复制服务器的版本库时,并不仅仅复制文件最新内容,而是将整个版本库复制下来就,每个人的电脑上都保存着一个完整的版本库,所以每个人的电脑上都能找到文件的演变历史。即使服务器没有运行,每个人的电脑也可以提交对文件的改动(这里指提交到本地),所以每个人的电脑也都可以进行版本管理,而集中式在本地没有版本库这个东西,所以一旦离开了服务器,无法进行版本管理。分布式系统只在需要更新来自服务器的文件改动时,才需要依赖服务器。

配置Git

这里只记录最基本的配置:配置用户名和邮箱,作为你进行提交操作时的个人信息

git config global user.name "name"
git config global user.email address@example.com

"global"表示这次是全局的配置,全局配置只需要配置一次,这些信息会被记录下来供后续使用。

使用"git config --list"命令可以列出所有git现在能找到的配置。

创建Git仓库

有两类方式:

  • 本地创建
  • 从服务器拉取

本地创建:
在你想要进行版本控制的文件夹里,使用以下命令:

git init

即可创建Git仓库,创建完成后在文件夹里会多出一个“.git”文件夹,git的所有数据信息都在该文件夹里。

拉取服务器的仓库到本地:
将服务器的仓库拉取到本地作为本地仓库,使用以下命令:

git clone url

使用具体网址代替“url”即可,此时会将服务器的仓库复制到本地。

提交文件变更到仓库

跟踪文件

尽管已经创建了仓库,但是默认的Git不会对文件夹里的文件进行管理(即跟踪),必须告诉Git哪些文件需要被跟踪。使用“git add”命令告诉Git哪些文件需要被跟踪,该命令后面可跟随文件名、文件夹名等等作为参数。如:

// 跟踪“test.txt”文件
git add test.txt

// 跟踪“example”路径下的所有文件
git add example/*

// 跟踪仓库里的所有文件
git add .

提交文件变更

当你修改了被跟踪的文件,需要提交变更,和别的版本控制系统(比如SVN)不同的是,SVN只要一条命令就能完成一次提交,Git需要两条,分别是“git add”和“git commit”命令,下文会对此进行解释。另外可以看到,“git add”是一条多功能命令,可以对未被跟踪的文件进行跟踪,也可以将已跟踪的被修改的文件进行提交,还有其它的功能会在下文介绍。以下命令将一个被修改的文件进行提交(“git commit”命令的“-m”参数表示对本次提交添加说明):

git add test.txt
git commit -m "提交test文件"

注意:只有使用了“git comit”命令才算真正提交了变更,只有使用了“git commit”命令提交的变更,你才能在Git中找到这次的提交历史(记录)

分区

Git通过分区来对文件进行管理,当使用“git add”命令和“git commit”命令时,文件就在不同的分区进行流动。主要可以分为三个区:工作区、暂存区、仓库区(也叫版本库),如下图(以下图片来自网络):

Git分区示意图

  • 工作区:创建Git仓库的文件夹(就是“.git”文件夹所在的文件夹)就是工作区。
  • 暂存区:图中“index”表示暂存区,它实际上就是“.git”文件夹下的一个文件。
  • 版本库:整个“.git”文件夹就是版本库,所以暂存区其实就是版本库里的一个文件。图中的“master”表示的是版本库里存放的master分支,使用“git commit”提交修改会更新对应的分支,分支的概念下文描述。

文件状态

说完了分区来说文件状态,分区和文件状态结合起来互相理解。Git里面文件的状态以及变化如下图所示(以下图片来自网络):

Git文件状态

工作目录里的文件只有两类状态:已跟踪或未跟踪。对于已跟踪的文件,又可以细分为未修改、已修改、已暂存。

  • 未跟踪(Untracked):如果是在本地创建的仓库,该仓库所在路径的所有文件,都处于未跟踪状态,需要使用“git add”命令告诉Git对它们进行跟踪。
  • 未修改(Unmodified):自上一次使用“git commit”命令提交之后没有修改过的文件,处于未修改状态。
  • 已修改(Modified):对未修改的文件进行编辑,文件变为已修改状态。
  • 已暂存(Staged):对已修改过的文件使用“git add”命令将文件提交到暂存区,文件变为已暂存状态。

Git命令、分区、文件状态结合来看的关系是:

  • git add”命令可以对未跟踪的文件进行跟踪,此时文件被提交到暂存区,状态从未跟踪变为已暂存。
  • “git add”命令可以将已修改的文件提交到暂存区,此时文件的状态从已修改变为已暂存。
  • “git commit”命令可以将暂存区的文件提交到版本库,此时文件的状态从已暂存变为未修改。注意,“git commit”命令会,但是也只会将暂存区的文件提交到版本库,对于没有处于暂存区但是改动过的文件,是不会被“git commit”命令提交的
  • 将文件从版本库里移除,文件状态从未修改变为未跟踪。

理解好文件状态很重要,因为查看文件状态和撤销修改的操作,都是根据文件的不同状态来考虑的。

查看文件状态

当你修改、暂存、提交了若干文件,这些文件可能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值