在想要建立的目录下输入命令
git init
我们可以看一下 .git目录下有什么
配置用户的 name 和 email
命令:git config [...]
配置完后,我们像查看一下 刚才的配置
git config -l
命令:git config --unset [...]
查看配置
配置已经删除了
解释:在我们的一台服务器上有时候并不是只有一个git仓库,如果我们想要全局配置的话需要加一个选项 --global
git config --global [...]
查看配置项
删除全局配置的话 只有 --unset 是不可以的,需要加上 --global 选项
但是,我们的工作区的文件并不是不可以被管理,我们需要做一些工作,看上图,
2. 我们图片上的 stage 区域,就是暂存区/索引
我们将工作区的的修改(新增、修改、删除),我们通过add,可以将修改的内容添加到暂存区,但是这并不算添加到版本库中
在我们add之后,我们只有进行commit后才会把修改的内容存到版本库中
我们只有做完这两步,我们的git才能管理这个 ReadMe 文件
其实在我们的版本库中,还有一个objects 对象,我们的objects中存的是一个个的git对象,而我们 每一次add的时候(对工作区的修改的内容),都会存在一个新的git对象中,所以我们维护的这些 git对象,也就是对这些文件进行版本管理
我们的stage 中存的是索引,指向objects
我们在commit后,就会把暂存区的内容存到master 中,而我们的master中也存的是索引
而我们想要拿到我们的master分支,我们只需要拿到 HEAD 指针,就好了
我们可以对应的看一下 .git目录 和上面的图片
但是我们的.git目录里面没有stage,因为 stage里面是暂存区,我们的git仓库是刚创建的,还没有暂存的内容,所以我们的.git目录里面还没有stage
我们现在ReadMe文件中写入一些内容
然后我们使用add,将 ReadMe文件添加到暂存区
git add [...] :表示指定文件的修改内容添加到暂存区
git add . :表示将所有的文件的修改内容添加到暂存区
git commit -m "这里面描述修改内容" ,这个-m必不可少,-m后面是本次版本的修改内容
commit 后,会打印日志
git log
如果觉得这样太乱的话,可以加 --pretty=oneline 打印一行
我们先看一下我们gitcode目录下的.git目录
我们现在看一下,我们的.git/HEAD
我们看到,我们的HEAD下有一个master
而我们知道,我们最后的内容都会存到master分支里面,我们看一下
我们看到我们的master里面是一串上面这样的文本,而我们注意,我们在上面commit后打印的日志里面就有这样内容
而我们的master存的就是索引,我们的索引最终都指向 objects
我们在看一下我们的 .git 目录里面的 objects目录
我们看前面的这两个,前面的这两位代表文件名,而后面的就代表d7里面的文件名了
如果我们想要查看里面的文件内容,我们的命令是:
git cat-file -p
这里面还有我们第一次提交的信息,我们再看一下我们该信息里面的 tree
我们继续看一下
我们看到,又打印出了一条信息,我们继续使用git cat-file -p 查看
我们看到了我们所写入的内容
我们先创建1个文件file1 然后 add
我们又创建一个文件 file2
然后我们 commit
我们原意是将file1 和 file2 都commit ,但是这里只有一个文件被changed 说明只有一个文件被修改,我们的file2没有被提交,因为我们的add是将文件放到暂存区(stage),我们的commit是将暂存区的文件给存到master分支中,我们的file2没有存到暂存区(也就是没有add),所以不可以被commit,如果我们想要将file2也存到master中,我们就继续对file2 进行add ,然后commit
实际上 git 追踪的是修改而不是文件
我们先将 hello world 修改为 hello git
git status
但是我们的 git status 并不能知道我们修改的内容
git diff [...]
上面的图片里面的内容可以看一下代表什么
git add后我们查看 git status
我们的这里的提示改变了,显示我们需要将改变commit
我们可以看一下没有add之前的提示
这里显示我们没有暂存区(stage)的内容需要提交
所以我们现在 commit 后继续用 git status 查看
版本回退:版本回退就是从当前版本回退到之前的某一个版本
命令:git reset [--soft | --mixed | --hard] [HEAD]
git reset 本质:回退的版本库中的内容
我们的git中是由三个区的分别是
1.工作区
2.暂存区
2.版本库
其中我们的git reset回退的结果是什么,由git reset 后面的三个选项觉得
我们之前的提交
那么当我们想要回退到第一次提交,我们使用 hard
我们将第一次提交的那一串ID粘贴到后面,然后我们看到打印了一条日志
我们现在看到,我们之前提交的 file1 file2已经在工作区都回退了
我们继续查看log
我们这次的log 只剩下第一次提交的内容了
如果我们后悔了刚才的回退,那么我们怎么样?
我们还是使用 git reset 命令
我们找到刚才回退之前查看的log,找到最后一次提交的ID
我们看一下工作区的文件和log
那么如果我们找不到之前的commit ID 呢?
git reflog
我们前面的这一部分也是提交ID,我们同样也可以使用前面的这个ID进行回退
我们先看一下现在的提交信息
我们使用git reset进行回退,这次使用reflog前面的ID
我们回退之后我们在查看一下log
我们现在已经有一个文本了,我们对已有文本进行修改,有三个场景
1.我们只对我们工作区的文本进行的修改
2.我们随工作区的文本进行修改后,还进行的add
3.我们不仅修改了工作区的文本,还add了,最后还commit了
我们的撤销操作对于这三种情况下是不同的
我们想对工作区的文本进行撤销
命令:git checkout --
我们看一下ReadMe文档
git checkout -- 表示将工作区恢复到最近一次add/commit的状态
我们要是想回退到之前的状态我们应该怎么做?
命令:git reset 该命令不仅可以回退到之前版本还可以回退到当前版本
gti reset HEAD :HEAD代表回退到当前版本,如果想回退到上一个版本我们还可以在HEAD后面加^, 加一个^代表回退到上一个加两个 ^代表回退到上面两个版本
由于我们的暂存区已经修改,所以我们可以使用 --mixed / --hard, --hard会直接将工作区版本也回退, --mixed只能回退暂存区的,所以把暂存区回退后就是第一种情况了
我们在看一下status
我们的暂存区已经回退了
下面我们在使用第一种情况下的处理方法
我们看到这样就回退了
我们的工作区、暂存区、版本库都修改了,所以我们使用 git reset --hard 操作撤销
我们删除掉file1
我们使用 git 提供的 rm 删除操作
我们看一下git rm 的作用
1.删除了工作区的文件
2.删除了暂存区的文件
所以我们只需要最后commit就可以了
我们最后看一下status
我们的工作区以及没有要提交的了
git 的基本操作就到这里~
下一次讲 git 分支管理