git快速入门(2)__版本比较、回退

实验一 修改内容回退

实验目的:通过实验理解三个区的区别,并练习如何对三个区的修改进行比对、如何撤销三个区的修改!

1.关于git本地文件夹结构

不考虑远程仓库,git本地目录中实际包括了三个区

https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E7%BD%AE%E6%8F%AD%E5%AF%86 文中对三个区的讲解非常通透,大家可以看一下

如果我们从远程仓库克隆到本地文件夹中时,本地仓库和远程仓库的内容一致。

同时,本地三个区内容可以保持一致。

即 本地仓库 == 暂存区 == 工作区

我们通过 git add 命令可以将新增 、修改 、删除的文件提交到暂存区

我们通过 git commit 命令可以将暂存区的内容提交到本地仓库

git status 显示的状态,就是比较工作区和暂存区的不同 、 比较 暂存区和本地仓库的不同。

2.操作步骤

  1. 请大家使用自己的gitee账号登录gitee.com

  1. fork 仓库https://gitee.com/caohongxing7604/cmo_week04 到你的gitee上

git快速入门(2)__版本比较、回退_第1张图片

点击账号后,点击确认按钮

git快速入门(2)__版本比较、回退_第2张图片

此时,查看你的仓库,就可以看到这个新的仓库了

git快速入门(2)__版本比较、回退_第3张图片

3.将你刚fork的仓库clone到本地

新建文件夹 week5

在week5的父目录上,右键点击“git bash here” 打开命令窗口

git快速入门(2)__版本比较、回退_第4张图片

在命令窗口中输入命令:注意命令中的仓库地址要改为你自己fork的那个地址奥

git clone https://gitee.com/caohx666/cmo_week04.git week5\

git快速入门(2)__版本比较、回退_第5张图片

克隆后结果如下,

这就是一个git工作区。在隐藏文件夹 .git 中有暂存区本地仓库文件夹。

git快速入门(2)__版本比较、回退_第6张图片

4. 新建012.txt 使其在不同区内容不同

我们要实现的目标如下:

git快速入门(2)__版本比较、回退_第7张图片

下面我们来实现上面的状态

(1) 新建012.txt,文件内容为1,

(2)在week5文件夹中点击右键菜单 git Bash here。。 打开命令行窗口。依次执行 提交到本地库

git add . 工作区文件提交到暂存区

git commit -m "yourname:xxxx add 001.txt --1 " 暂存区文件提交到工作区

git快速入门(2)__版本比较、回退_第8张图片

(2) 再修改012.txt内容,追加一行内容为“2”后,提交 到暂存区

git add . 工作区文件提交到暂存区

用git status 可以看到系统提示绿色的012.txt,这就表示暂存区和本地仓库文件内容不一致

git快速入门(2)__版本比较、回退_第9张图片

(3) 再修改012.txt内容,追加一行内容为“3”

git快速入门(2)__版本比较、回退_第10张图片

此时三个区的文件状态达到目标状态。如下:

git快速入门(2)__版本比较、回退_第11张图片

5.文件夹复制6份

为了测试不同情况,大家可以将该文件夹复制四份,文件名合法即可

git快速入门(2)__版本比较、回退_第12张图片

6.文件比较

这里大家可以使用比较工具比较一下暂存区和工作区

git diff 比较工作区与暂存区的所有文件

git diff filename 比较工作区与暂存区的指定文件

git diff 版本号 比较工作区与指定版本

git diff --cached 文件名 比较暂存区与最新提交版本的文件的差别

git diff HEAD 文件名 比较暂存区、工作区的与最新提交之间的差别

git diff 版本号1 版本号2 文件名 比较两个版本号之间的指定文件的差别

详细区别大家可以参看博客https://blog.csdn.net/cherishlicoolboy/article/details/107840465

git 按行为单位管理文件

(1) 比较工作区与暂存区

为了顺利执行一下操作,请先进入刚才复制的文件夹。通过右键菜单 “git Bash Here ..”打开git命令窗口

git diff 比较工作区与暂存区的所有文件

git diff filename 比较工作区与暂存区的指定文件

git diff 012.txt 比较工作区与暂存区的012.txt

git快速入门(2)__版本比较、回退_第13张图片

(2)比较暂存区和本地仓库

git diff --cached 文件名 比较暂存区与最新提交版本的文件的差别

git diff --cached 012.txt 比较暂存区与最新提交版本的文件的差别

git快速入门(2)__版本比较、回退_第14张图片

(3)比较本地仓库最新版本和工作区

git diff HEAD filename 比较当前工作目录中的文件012.txt与最近的一次提交

git diff HEAD 012.txt 比较当前工作目录中的文件012.txt与最近的一次提交(即HEAD指向的提交)之间的差异,并

将差异输出到终端上。

比较不同版本的差别

git快速入门(2)__版本比较、回退_第15张图片

(4)比较不同版本的差别

git diff 版本号1 版本号2 文件名 比较两个版本号之间的指定文件的差别

为了能比较版本,你可以通过 git log --oneline 先查看日志、

git diff d50d0a8 e693478 比较版本d50d0a8 版本e693478之间的指定文件的差别

git快速入门(2)__版本比较、回退_第16张图片

下面我们来实验如何进行不同区修改内容的回退。

6. 工作区修改的回退

进入刚才复制的一个文件夹,打开git命令窗口

git checkout -- filename 撤销工作区中对某文件的修改,回复到和暂存区一致

git checkout -- . 撤销工作区中对所有文件的修改,回复到和暂存区一致

git checkout -- 012.txt 执行之后,工作区012.txt的内容回复为 12,和暂存区一致了

git快速入门(2)__版本比较、回退_第17张图片

7 暂存区修改的回退

进入刚才复制的一个文件夹,打开git命令窗口

git reset HEAD :此命令将取消暂存指定文件的更改,从而使其退回到未暂存状态。

git reset HEAD 012.txt 暂存区额内容回复为1

git快速入门(2)__版本比较、回退_第18张图片

8. 本地版本库提交的回退

有时我们刚提交到本地库了,但是又后悔了,或者最近几个提交我都不想要了,版本库和暂存区都想回到之前的状态。

git reset 版本号 本地仓库和暂存区退回到指定版本

git reset HEAD^ 本地仓库和暂存区退回到上个版本 ^表示父版本

git reset HEAD~3 本地仓库和暂存区退回到HEAD所指定的版本之前的第三个版本

git reset e2dd617 本地仓库和暂存区退回到指定版本e2dd617

在使用 Git 时,波浪线 (~) 和插入符号 (^) 都可以与 Git 中的版本号一起使用来指定提交历史记录中的特定版本。

波浪线和插入符号的主要区别在于它们如何选择版本。波浪线(~)表示“较早的提交”,而插入符号(^)表示“父提交”。

如果要父版本的父版本就用 git reset HEAD^^

当然也可以用波浪线 git reset HEAD~3 表示HEAD之前的第三个提交

我们可以使用git log --oneline 查看日志情况

git快速入门(2)__版本比较、回退_第19张图片

git reset HEAD^ 工作区和暂存区退回到上个版本,工作区保持不变

git快速入门(2)__版本比较、回退_第20张图片

9. git reset --soft

git reset 可以进行版本回退。

我们知道在开发的计算机上存在 git工作区、暂存区和本地仓库

当版本回退时。根据是否要让不同的区域回退,就出现了不同的不同的回退命令

a. git reset --hard 【索引】

本地仓库、暂存区、工作区全部回退到指定索引提交后的状态。

所有提交后的修改都被删除掉 。它本质上是撤销了工作区、暂存区以及提交,回退到指定版本

git快速入门(2)__版本比较、回退_第21张图片

b. git reset --mix 【索引】 (缺省为mix,故可省略 --mix)

本地仓库、暂存区回退,工作区不回退。

git reset HEAD 用于对git add等命令的撤销。它本质上是撤销了提交以及暂存区的修改

git快速入门(2)__版本比较、回退_第22张图片

c. git reset --soft 【索引】

本地仓库回退、暂存区、工作区不回退。

git reset --soft HEAD^ 它本质上是撤销了上一次 git commit 命令

git快速入门(2)__版本比较、回退_第23张图片

当某次提交错误,想撤销重新修改后提交,则可以先用--soft回退版本,修改后 重新add修改的文件,然后重新commit。

假设我们之前提交的006.txt错误了,末尾少了一行代码“666”,我们现在可以回退,修改后,再次提交。

此时操作,就会在当前你修改的基础上,把006.txt也修改了

下面我们来实操,看看效果,

进入刚才复制的文件夹中,打开git命令窗口

git reset --soft 版本号 让版本库回退到指定版本 工作区和工作区不变

git快速入门(2)__版本比较、回退_第24张图片

git log --oneline 查看提交日志

git reset --soft 97af44a 让版本看和暂存区回退到 97af44a版本 工作区和工作区不变

git status 查看状态

git快速入门(2)__版本比较、回退_第25张图片

然后重新修改后,git add 后,git commit,

git快速入门(2)__版本比较、回退_第26张图片

git快速入门(2)__版本比较、回退_第27张图片

git reset --mixed命令可以起到净化提交历史的作用

当某次提交不正确,想重新提交,可以使用--soft撤销提交,重新修改后,commit。

git reset --soft HEAD^ 本质是撤销上一次commit提交

10. git reset --mix

--mix是缺省的,不写就表示mix

--mix执行后,工作区不变,暂存区和本地仓库都回到该版本。

git快速入门(2)__版本比较、回退_第28张图片

当某次提交错误,想撤销重新修改后提交,也可以先用--mix回退版本,修改后重新add,然后commit。

git reset --mix 97af44a

其中的 97af44a 是git log --oneline中看到的版本的索引

执行后,工作区不变,暂存区和本地仓库都回到该版本。

git快速入门(2)__版本比较、回退_第29张图片

11.git reset --hard

有时我们发现最近的的几次修改都是不对的,那么我们可以将本地仓库、暂存区、工作区全部回退到历史版本。

该命令是最为常用的命令。

git reset --hard 97af44a

其中的 97af44a 是git log --oneline中看到的版本的索引

执行后,工作区、暂存区和本地仓库都回到该版本。

git快速入门(2)__版本比较、回退_第30张图片

你可能感兴趣的:(版本管理,git,diff,版本比较,reset,回退)