Git:学习笔记(一)—基础操作与版本回退

Git简介

Git是什么

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

集中式与分布式

集中式版本控制系统: CVS、SVN
所谓集中式版本控制系统,就是版本库是集中放在一个中央服务器的,干活的时候用的都是自己的电脑,因此要先从中央服务器获取最新版本,然后开始干活,活干完后,再把自己完成的最新版本推送到中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,速度快,但是如果在互联网上,网速慢的话,下载一个10M的文件得五六分钟,这就比较头疼了…
分布式版本控制系统: Git
分布式版本控制系统,它与集中式最大的不同就是,分布式版本控制系统不需要联网,因为它根本没有中央服务器,而是在每个人的电脑上都有一个版本库,工作的时候,甲在自己的电脑上修改了文件A,他的同事乙在自己的电脑上也修改了文件A,这是,甲乙两人只需要把自己的修改推送给对方就可以互相看到对方的修改了。与集中式相比,分布式版本控制系统的安全性要高出很多,因为集中式版本控制系统的话,如果中央服务器宕掉了,那么就会导致所有人都没得活干了,而分布式版本控制系统,每个人的电脑都有版本库,某一个人的电脑坏了不要紧,随便从另外一个同事那里复制一个就可以了。

在实际使用中,很少有两人之间互相推送版本库的修改,因为他们可能不在一个局域网,因此分布式版本控制系统也有一个“中央服务器”,但是这个服务器仅仅用来交换大家的修改,没有它大家一样可以正常工作,只是交换修改不方便而已。

安装Git

Git最早是在Linux系统上开发的,很长一段时间,Git只能在linux和unix上面跑,慢慢的有人将它移植到了windows上,现在,Git可以运行在linux、unix、MAC、windows这几大平台了。

在Linux上安装Git

我使用的是Redhat6版本的linux系统,镜像里面已经内置好了Git,我们直接使用yum的方式安装即可,其他版本的话如果直接安装不了,可以到官网下载源码包进行源码编译安装(./config-------->make----------->make install)
在这里插入图片描述
yum install git -y
在这里插入图片描述
安装完成后在终端输入git,就会出现git的帮助文档
在这里插入图片描述
安装完成后我们还需要进行最后一步的配置,在终端执行以下命令

git config --global user.name 'your name'
git config --global user.email 'your email([email protected])'

在这里插入图片描述因为Git是分布式版本控制系统,所以每个人必须自报家门:你的名字和你的邮箱地址。注意:git config 的–global参数,表示这台机器上的所有Git仓库都会使用这个配置,你也可以对某个仓库指定不同的名字和邮箱。

创建版本库

版本库又叫仓库,可以将他理解成一个目录,这个目录中的所有文件都会被Git管理起来,每个文件的修改、删除,Git都可以跟踪,以便任何时刻都可以跟踪历史,会者在将来某个时可“还原“。
1、选择一个合适的地方,创建一个新目录

mkdir gitdemo
cd gitdemo
pwd

在这里插入图片描述
2、使用git init命令将这个目录变成Git可管理的目录,即版本库
在这里插入图片描述
使用这个命令,Git瞬间就把仓库建好了,并且告诉你是一个空的Git仓库(empty Git repository),细心的人可以发现,使用这个命令后,该目录下多了一个.git目录,没事千万别去修改这个目录中的文件,这个目录是Git用来跟踪管理版本库的,乱改的话,就会破坏Git仓库。

3、把文件添加到版本库
明确一下,所有的版本控制系统,都只能管理文本文件,只能跟踪文本文件的改动,例如TXT文件,因此,git也不例外,如果是二进制文件或者是word文件,版本控制系统就不会跟踪其的改动了。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
4、编写一个README.txt文件,内容如下:

Git	is	a	version	control	system.
Git	is	free	software.

注意,这个文件一定要放到git目录中,即之前创建的目录中,也可以放在其子目录下,因为只有放在版本库中,Git才可以对其进行管理。
创建好后,我们需要两步将该文件添加入git仓库:
第一步:使用git add README.txt,执行后没有任何显示即为成功,因为在unix系统中,没有消息就是好消息。
在这里插入图片描述
第二步:使用git commit命令告诉git,提交了一个文件到了git仓库
在这里插入图片描述git commit后面的-m参数后面的是对本次提交的说明,尽力写一些有用的说明,git commit命令会告诉你提交后哪里有了改动,git commit命令一次性可以提交多个文件到版本库中,就是说你可以多次使用git add添加多个文件后,然后使用git commit命令一次性将这些文件提交。

git status与git diff

git status: 改命令可以让我们随时掌握版本库的状态,告诉我们版本库中有没有哪个文件被修改了。
git diff: git status可以告诉我们那个文件被修改了,但是,如果可以看到是哪些内容被修改了,修改成了什么内容,那显然是更好的,我们可以使用git diff来实现,diff即为different,显示不同的地方。

1、我们修改之前的README.txt文件,修改为如下内容:

Git is a distributed version control system.
Git is free software.

2、现在,运行git status命令查看仓库状态:
在这里插入图片描述
上面显示告诉我们,README.txt文加被修改了,但是还没有被提交,我们也不知道是哪些内容被修改了,使用git diff命令查看:
在这里插入图片描述
可以看到,README.txt文件中的Git is a version control system.被修改成了Git is a distributed version control system.与linux中的diff命令输出相同,-号后面表示修改之前的内容,+后面表示修改之后的内容。
3、知道了文件被修改了哪些内容,现在我们就可以放心的提交了,再次提交与提交新文件是相同的,两步,第一步:
git add README.txt
在这里插入图片描述
第二步:git commit -m ‘add distributed’
在这里插入图片描述
4、提交后,我们再次使用git status查看仓库状态
在这里插入图片描述
显示没有需要提交的修改,并且工作目录是干净的。

忽略特殊文件

有些时候你必须把某些文件放入版本库中,但是你又不能提交他们,比如保存了数据库密码的配置文件等等,每次git status时都会出现untracked files,这确实让人狠抓狂啊,好在Git考虑到了大家的感受,这个问题解决起来也是非常简单,我们只要在Git工作区的根目录下创建一个.gitignore文件,然后把需要忽略的文件名填进去,Git就会自动忽略这些文件。
忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个
    文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生
    的 .class 文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
    编辑好.gitignore文件后,我们需要将它提交到Git

比如说我们的版本库中有一个my.cnf文件,当我们不想提交它时,我们每次git status都会出现提示
在这里插入图片描述
我们现在在.gitignore文件中写入文件名my.cnf,提交到Git然后再执行git status

在这里插入图片描述

版本回退

我们每次修改文件并提交后,都会产生一个快照,这个快照被称为‘commit’,有了这些快照,当我们将文件乱改了或者误删除了的话,我们可以使用这些‘commit‘,将文件还原到最近的一个commit,然后继续工作,而不是丢失掉全部成果。

1、git log命令可以告诉我们一共提交了几个版本到了仓库:
在这里插入图片描述
git log命令可以显示从最近到最远的提交日志,我们可以加上–pretty=oneline简化输出内容:
在这里插入图片描述
我们看到的这些长串的数字加字母叫git的commit id号,因为git是分布式版本控制系统,因此这些commit id号必须非常的大,如果是1,2,3这种的话,最后肯定会冲突,这是由SHA1计算出来的一串非常大的数字。

在git中,用HEAD表示当前版本,HEAD^表示上个版本,HEAD^表示上上个版本,那如果有前100个版本呢,我们可以使用HEAD~100来表示,现在我们使用git reset命令将版本回退到之前的版本吧

我们现在的版本是‘add GPL’,现在使用git reset --hard HEAD^命令将其回退到上个版本,即‘add distributed’版本
在这里插入图片描述
我们来看看README.txt文件的内容是否回退成功
在这里插入图片描述
我们还可以继续往前回退,不过现在我们先来使用git log查看一下仓库状态
在这里插入图片描述
可以看到,回退之前的版本已经消失了,那我们现在返回了想撤销回去该怎么办呢,可以这样做,只要我们没有关闭当前的终端,可以在之前找到回退之前版本的commit id,然后使用git reset --hard 'commit id’来进行撤销,commit id只用写前面几个就行,不用全写,git会自动去找符合要求的。
在这里插入图片描述
git版本回退的速度非常快,这是因为在他的内部有一个指向当前版本的HEAD指针,当你回退版本的时候,git只是将HEAD指针指向了add GPL。
在这里插入图片描述
该为指向add distributed:
在这里插入图片描述
前面我们说过可以使用commit id来恢复到回退之前的版本,那如果我们今天回退到了某个版本,然后将电脑关闭了,第二天又想回到回退之前的版本的话该怎么办,别担心,只要我们找到想恢复版本的commit id号就可以了,比如说我们现在要恢复到add GPL版本,我们可以使用git reflog命令,git reflog命令记录了你之前的每一次命令
在这里插入图片描述
我们可以看到,第四行显示的就是add GPL版本的commit id号,现在我们可以恢复了

总结一下

一、

1、初始化一个git仓库,使用命令:git init
2、添加文件到git仓库,分为两步:
		# git add 文本文件
		# git commit -m ‘说明’
可以一次添加多个文件,然后使用git commit一次性提交

二、

1、要随时掌握工作区的状态,使用命令 git status
2、如果使用了git status告诉你有文件被修改过,那么可以使用git diff来查看被修改的内容

三、

1、HEAD指的是当前版本,使用git reset --hard ‘commit id’可以在各个历史版本之间来回穿梭
2、如果想恢复到回退之前的版本,我们可以使用git reflog命令查看我们之前的操作,其中会有回退之前版本的commit id号,拿到commit id号,我们就可以使用git reset --hard ‘commit id’进行恢复了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章