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

实验一 修改内容回退

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

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

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

git的三个区进行了说明

Git - 重置揭密 文中对三个区的讲解非常通透,大家可以看一下

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

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

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

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

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

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

2.操作步骤

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

  2. 请大家在计算机上设置git账号

git全局设置,配置用户名和邮箱(这些信息大家也可以可以从gitee上复制)

如果不设置,后期提交时,git仓库不知道是谁提交的。全局设置只需要设置一次,以后就不用再设置了,机房每次都会复原,所以大家每次都要设置一下。

在命令行中执行如下信息, 用户名 和 邮箱换成你的git账号的

git config --global user.name "xxxx"

git config --global user.email "xxxx@126.com"

  1. fork 仓库  cmo_week04 到你的gitee上

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

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

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

新建文件夹 week5

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

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

git clone cmo_week04: 软件配置管理 第四周课程练习仓库 week5\

克隆后结果如下,

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

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

我们要实现的目标如下:

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

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

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

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

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

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

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

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

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

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

5.文件夹复制6份

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

6.文件比较

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

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

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

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

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

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

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

详细区别大家可以参看博客git diff 和 git diff –cached 和 git diff HEAD实际应用中的区别对比+详细解释_git diff 和git diff head-CSDN博客

git 按行为单位管理文件

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

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

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

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

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

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

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

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

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

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

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

将差异输出到终端上。

比较不同版本的差别

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

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

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

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

7.撤销修改

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

(1) 工作区修改的回退

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

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

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

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

(2) 暂存区修改的回退

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

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

git reset HEAD 012.txt 暂存区的内容恢复为1

(3)本地版本库提交的回退

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

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 reset HEAD^ 工作区和暂存区退回到上个版本,工作区保持不变

(4) git reset  的 --soft --mix  --hard 的区别

git reset 可以进行版本回退。

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

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

a. git reset --hard 【索引】

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

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

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

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

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

c. git reset --soft 【索引】

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

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

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

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

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

(5)实操

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

(a)  git reset --soft

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

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

git log --oneline 查看提交日志

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

git status 查看状态

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

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

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

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

(b)  git reset --mix

git reset --mix

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

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

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

git reset --mix 97af44a

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

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

(c)  git reset --hard

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

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

git reset --hard 97af44a

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

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

8 git revert

适用情况:适合公有分支

    它和 git reset 的不同之处在于,他的撤销,其实是增加一个相反的版本。实现撤销。

  1. 销提交到暂存区的修改
  2. 撤销commit 提交
  3. git push 或撤销 提交
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹红杏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值