本文章学习于【GeekHour】一小时Git教程,来自bilibili
Git就是一个文件管理系统,这样说吧,当多个人同时在操作一个文件的同时,很容易造成紊乱,git就是保证文件不紊乱产生的
包括集中式管理系统和分布式管理系统
听懂了,集中式管理系统就是从中央服务器上下载最新的版本文件,修改文件之后将 文件上传到中央管理系统,然后中央管理系统得到你更改之后的文件
缺点:中央服务器出现问题所有人都无法工作
都有一个完整的版本库,不需要网络就可以直接在本地修改
当需要把文件分享给其他人的时候,只需要把仓库互相同步一下就行了
git就是分布式的
如何新建一个管理库
将仓库理解为一个目录,这个目录下的所有文件的修改,删除,git都可以追踪到,这样我们就可以恢复到之前的版本
git init:在本地上面创建一个文件夹
git clone:直接从github上克隆一个项目,会生成一个文件夹
windows系统下bash的操作
ls -a是用来检测git文件是否存在,是仓库是否创建成功的标志
可以通过以上命令来观察git文件的内容,但是不要轻易修改
现在我们返回到之前的文件夹,然后我们通过 \rm -rf .git 将git文件删除掉,然后我们在当前文件夹 下面重新创建了一个my-repo的文件夹,并且以这个为仓库继续执行(my-repo中有我们的.git)
之后我们进入我们的my-repo文件夹并且检索文件中是否含有.git
Git的工作区域和文件状态
工作区:就是我们电脑上的目录 .git所在的目录
暂存区:用于保存即将提交到github上的修改内容 .git/index所在
本地仓库:通过git init 创建的那个仓库
当我们的代码文件到达一定阶段之后,我们需要保存在本地仓库
如果我们每次修改一次文件就提交的话,会比较麻烦,所以我们先将我们将要提交的文件保存在暂存区中,然后某一阶段结束之后,再统一提交到本地仓库中
通过以上几个命令创建一个文件(在git文件所在的文件夹中打开git bash)
现在我们的file1.txt目前在工作区,现在我们将他载入到暂存区
然后我们的文件file变成了绿色,表示现在这个文件已经被添加到了暂存区,等待被提交
看绿色文件上方的文字
git rm 表示我们可以通过这个命令来取消暂存
git commit只会提交暂存区中的文件,而不会提交工作区的其他文件
接着我们提交file1这个文件
之后我们添加了几个文件,这些文件用来演示git add多个文件的操作
值得注意的是ls命令会把所有工作区中(包括已提交)的文件显示出来
只有看git status才知道有没有放到暂存区,或者已经提交了
我们接着使用git add *.txt将文件提交到本地仓库中
txt文件全部提交
使用git . 可以该文件夹下的所有文件都提交到暂存区中
这里的 . 表示当前目录
如果我们使用git commit就会进入到交互页面,交互页面是一个vs的界面
使用方向键 来移动光标
使用i键进入编辑模式
输入提交信息
之后esc键回到命令模式
输入:wq命令保存退出
可以看到所有文件都已经提交完成了
使用git log 来查看提交记录,可以看到我们的两次提交
每次提交都有一个提交id
以及提交的作者和邮箱id
还有日期
可以使用git log --oneline 来展示简介的提交记录
让我们总结一下:
-
git status
查看仓库的状态 -
git add
提交到暂存区 -
git commit
提交 ——只提交暂存区的内容,不会提交工作区 -
git log
查看仓库提交历史记录——可以使用log -- oneline
来查看简介的提交记录
git reset
reset命令用于提交版本,可以用于回到之前的某个提交的状态
git reset的三种模式
git reset --soft
表示回退到某个版本,并且保存工作区和暂存区的所有修改内容
git reset -- hard
表示回退到某个版本,并且丢弃工作区和暂存区的所有修改内容
git reset --mixed
表示回退到某个版本,并且只保存工作区 的修改内容并且丢弃暂存区的修改内容
首先我们重新回到learn_git的开始部分
然后重新创建一个空的带有git的文件夹,相当于工作区
然后我们加入了三个文件
接着分别提交
我们首先打开一个新的终端(还是bash)
接着我们将这个文件夹复制三份 分别来执行三种不同的soft命令
然后我们使用soft命令回退到之前的状态,
这是之前提交的状态码
我们可以注意到file3并没有添加到暂存区,这是因为我们回退到了第二个版本
我们接着我们的实验,进入到hard文件夹下面
使用reset hard进入到之前的状态
然后我们进行检测
lsb表示工作区的内容,git ls-files表示暂存区的内容
接着做那个git reset
谨慎使用git reset--hard 这个命令,不过使用了其实也没什么关系
不过如果使用了也没有关系,因为我们可以回退
这个时候我们可以发现通过这个标号,我们成功回退到了之前的状态
git diff
查看工作区、暂存区、本地仓库之间的差异
git diff 如果后面什么也不加,会默认比较工作区和暂存区之间的内容
我们以修改file3.txt文件为例子
第一行显示的是哪个文件改变了
第二行展示的是文件的哈希值 后面的10064表示的是文件的权限
接着我们提交,然后再次检测git diff 可发现没有发现异常
将我们的暂存区和本地仓库的区别也可以显现出来
使用git diff HEAD
命令即可比较工作区和本地仓库之间的差异
使用git diff --cached
可以比较暂存区和本地仓库之间的差异
图片没有保存到本地,下次我注意一下