Bootstrap

Git基本操作

目录

一、创建本地仓库

二、配置本地仓库

三、工作区、暂存区和版本库

四、.git文件详解

五、修改文件

六、版本回退

1.版本回退

2.如何撤销回退

3.版本回退原理

七、撤销修改

八、删除文件


作者环境为云服务器下的Ubuntu环境

一、创建本地仓库

任意创建一个目录文件,进入该目录并使用 git init 命令初始化该目录文件,则该目录文件即为本地仓库

git init

初始化本地仓库后,仓库中多出一个名为 .git 的隐藏文件,该文件为Git用于跟踪管理本地仓库

二、配置本地仓库

配置本地仓库需要设置 用户名称 和 e-mail地址,使用 --global选项表示将当前机器中的所有本地仓库都使用该配置

git config [--global] user.name "zz"
git config [--global] user.email "xxxxxxxx"

查看当前配置

git config -l

删除配置,同样地使用 --global 选项表示删除所有仓库的配置

git config [--global] --unset user.name
git config [--global] --unset user.email

三、工作区、暂存区和版本库

工作区:本地仓库中与.git文件同目录下,除了.git目录外的所有地方都是工作区

暂存区:.git目录下的index文件,暂存区也叫做索引

版本库:又叫仓库,指的是整个.git文件

将工作区文件提交到暂存区

git add file1 file2 #将指定文件file1、file2提交到暂存区
git add . #将工作区的所有文件都提交到暂存区

将暂存区文件提交到版本库,-m后的内容为提交描述

git commit file1 file2 -m "xxxxx" #将文件file1、file2提交到版本库
git commit -m "xxxxx" #将暂存区的所有文件都提交到版本库

查看历史提交记录,使用--pretty=oneline选项可以精简提交记录

git log 
git log --pretty=oneline

关于commit id版本号:是⼀个SHA1计算出来的一个非常大的数字,用十六进制表示

四、.git文件详解

提交文件后的.git文件会发生变化

1.index文件:暂存区

2.HEAD指针:指向分支master,master在 .git/refs/heads/master路径下

3.master文件:保存最新一次提交的版本号,该版本号是一个Commit对象

4.objects文件:是Git的对象库,存储了四种版本库对象:

Tree对象:树对象,存储的是该次文件提交时,文件所处目录中的其他文件(包括自己)

Commit对象:存储了提交对象的作者、提交描述、树对象、父提交(上一次提交的Commit对象)

Blob对象:存储的是文件的内容

Tag对象:表示一个标签或引用,通常用来标记一个特定的提交,或者给一个提交打上一个特定的标签

使用 git cat-file -p 对象 指令可以查看对象的内容

git cat-file -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

例如新提交文件test2.cc,查看HEAD指针,找到master文件;再查看master文件,得到新提交文件test2.cc的Commit对象;再查看文件test2.cc的Commit对象,得到Tree对象、父提交、提交作者以及提交描述等信息;再查看文件test2.cc的Tree对象,得到三个Blob对象;再查看文件test2.cc的Blob对象,得到test2.cc的文件内容

五、修改文件

Git跟踪管理的并不是文件本身,而是修改(新增文件、删除文件、修改文件)

修改工作区的文件后,其和暂存区、版本库中的文件就会存在不同

查看本地仓库状态(检测工作区文件和版本库中的文件是否有不同)

git status

查看工作区和暂存区文件的具体差异

git diff file

查看工作区和版本库文件的具体差异(省略文件名则默认查看所有所有文件的差异)

git diff HEAD -- [file]

六、版本回退

注意:版本回退都是以版本库为基准的!

1.版本回退

使用  git reset 命令进行版本回退,HEAD指的是版本号(如果省略版本号只有在使用--mixed选项时有效并且回退到上一个版本)

git reset [--soft | --mixed | --hard] [HEAD]

--soft表示只进行版本库的回退

--mixed表示进行版本库和暂存区的回退(默认不带选项则使用--mixed)

--hard表示进行版本库、暂存区和工作区的回退(谨慎使用,工作区的版本回退可能会导致数据丢失)

HEAD说明:HEAD表示当前版本、HEAD^表示上一个版本、HEAD^^表示上上一个版本……

                     HEAD~0表示当前版本、HEAD~1表示上一个版本、HEAD~2表示上上一个版本……

首先要使用 git log 命令查看历史提交记录,得到历史版本号再进行版本回退。版本回退之后对应的历史提交记录也会被清除。

2.如何撤销回退

使用git reflog命令查看历史的每一次提交记录,包括版本回退记录,找到对应的版本号进行回退

3.版本回退原理

因为Git中有一个HEAD指针,指向master分支中最新的commit id。当进行版本回退时,Git仅仅是将master分支存储上回退的版本号

七、撤销修改

撤销修改是指当工作区文件被编辑更改后,想要回退当上一个版本。共有三种情况:

例如最开始:工作区文件为AAA ;暂存区文件为AAA;版本库文件为AAA

1.没有add

工作区文件为AAABBB ;暂存区文件为AAA;版本库文件为AAA

使用git checkout命令,撤销工作区文件的修改,使其与暂存区中的文件相同

git checkout -- file

2.add,但没有commit

工作区文件为AAABBB ;暂存区文件为AAABBB;版本库文件为AAA

使用git reset命令将版本库和暂存区的文件回退到当前版本,再使用git checkout命令撤销工作区文件的修改

git reset --mixed HEAD file
git checkout -- file

3.commit了

工作区文件为AAABBB ;暂存区文件为AAABBB;版本库文件为AAABBB

使用git reset命令将三个区域的文件全部回退到上一个版本

git reset --hard HEAD^ file

八、删除文件

单纯地使用 rm file 仅仅是删除工作区的文件,并不是删除版本库中的文件

删除文件共有两种方式:

1.使用rm file删除工作区文件,再使用 git add 和 git commit 同步暂存区和版本库中的文件

rm file
git add file
git commit file -m "delete file"

2.使用git rm file删除工作区和暂存区的文件,再使用git commit 同步版本库中的文件

git rm file
git commit file -m "delete file"
;