Git学习

一、Git简介

1.Git是什么?Git是目前世界上最先进的分布式版本控制系统(没有之一)。

Workspace:工作区

Index / Stage:暂存区

Repository:仓库区(或本地仓库)

Remote:远程仓库

如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:

想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件"另存为......"一个新的Word文件,再接着改,改到一定程度,再"另存为......"一个新文件,这样一直改下去,最后你的Word文档变成了这样:

过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。

看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。

更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。

于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?

这个软件用起来就应该像这个样子,能记录每次文件的改动:

2.集中式vs分布式

集中式

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

分布式

那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有"中央服务器",每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当"中央服务器"的电脑,但这个服务器的作用仅仅是用来方便"交换"大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

创建版本库

通过git init把当前目录变成git可以管理的仓库

在当前目录下新建一个记事本文件readme.txt,内容:111111

第一步:使用git add readme.txt添加到暂存区

第二步:用命令git commit告诉git,把文件提交到仓库

第三步:通过命令git status来查看是否还有文件未提交

第四步:查看readme.txt文件到底改了什么内容 git diff readme.txt

二、版本回退

查看对readme.txt的修改历史记录,使用git log(从最近到最远的显示日志)

如果嫌显示的信息太多,使用

复制代码
git log --pretty=oneline

回退到上一个版本

复制代码
第一种:git reset --hard HEAD^(回退几个版本就得用几个^)
第二种:git reset --hard HEAD~100

查看readme.txt

复制代码
cat readme.txt

获取版本号

复制代码
git reflog

根据版本号回退

复制代码
git reset --hard 版本号

三、理解工作区与暂存区的区别?

工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。

版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。

我们前面说过使用Git提交文件到版本库有两步

第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。

第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。

四、Git撤销修改和删除文件操作

一:撤销修改:

比如我现在在readme.txt文件里面增加一行 内容为555555555555,我们先通过命令查看如下:

第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。

第二:我可以按以前的方法直接恢复到上一个版本。使用 git reset --hard HEAD^

但是现在我不想使用上面的2种方法,我想直接想使用撤销命令该如何操作呢?首先在做撤销之前,我们可以先用 git status 查看下当前的状态。如下所示:

可以发现,Git会告诉你,git checkout -- file 可以丢弃工作区的修改,如下命令:

git checkout -- readme.txt,如下所示:

命令 git checkout --readme.txt 意思就是,把readme.txt文件在工作区做的修改全部撤销,这里有2种情况,如下:

1.readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。

2.另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。

相关推荐
草原上唱山歌4 分钟前
推荐学习的C++书籍
开发语言·c++·学习
DKunYu8 分钟前
2.分支管理
大数据·git·elasticsearch·搜索引擎·gitee
安得权10 分钟前
Azure Dataverse 权限设计学习
学习·flask·azure
做cv的小昊1 小时前
【TJU】信息检索与分析课程笔记和练习(6)英文数据库检索—web of science
大数据·数据库·笔记·学习·全文检索
Darkershadow1 小时前
蓝牙学习之uuid与mac
python·学习·ble
DKunYu1 小时前
1.基本操作
git·gitee
毛小茛1 小时前
芋道管理系统学习——项目结构
java·学习
小龙1 小时前
【Git 报错解决】SSH 公钥认证失败(`Permission denied (publickey)`)
运维·git·ssh
北岛寒沫2 小时前
北京大学国家发展研究院 经济学原理课程笔记(第二十五课 开放宏观基本概念)
经验分享·笔记·学习
哆啦code梦2 小时前
Git Flow架构图解:分支策略全解析
git·git flow·分支策略