实验一 修改内容回退
实验目的:通过实验理解三个区的区别,并练习如何对三个区的修改进行比对、如何撤销三个区的修改!
1.关于git本地文件夹结构
不考虑远程仓库,git本地目录中实际包括了三个区
git的三个区进行了说明
Git - 重置揭密 文中对三个区的讲解非常通透,大家可以看一下
如果我们从远程仓库克隆到本地文件夹中时,本地仓库和远程仓库的内容一致。
同时,本地三个区内容可以保持一致。
即 本地仓库 == 暂存区 == 工作区
我们通过 git add 命令可以将新增 、修改 、删除的文件提交到暂存区
我们通过 git commit 命令可以将暂存区的内容提交到本地仓库
git status 显示的状态,就是比较工作区和暂存区的不同 、 比较 暂存区和本地仓库的不同。
2.操作步骤
-
请大家使用自己的gitee账号登录gitee.com
- 请大家在计算机上设置git账号
git全局设置,配置用户名和邮箱(这些信息大家也可以可以从gitee上复制)
如果不设置,后期提交时,git仓库不知道是谁提交的。全局设置只需要设置一次,以后就不用再设置了,机房每次都会复原,所以大家每次都要设置一下。
在命令行中执行如下信息, 用户名 和 邮箱换成你的git账号的
git config --global user.name "xxxx"
git config --global user.email "xxxx@126.com"
-
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 的不同之处在于,他的撤销,其实是增加一个相反的版本。实现撤销。文章来源:https://www.toymoban.com/news/detail-489688.html
文章来源地址https://www.toymoban.com/news/detail-489688.html
-
销提交到暂存区的修改
-
撤销commit 提交
-
git push 或撤销 提交
到了这里,关于git快速入门(2)__版本比较、回退的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!