Git学习笔记(3): Git基本操作(历史记录、版本前进和后退、找回文件、文件内容比较)
文章目录
注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/106105282
1 查看当前工作状态
查看当前工作状态命令为: git status
(1) 当文件被修改,没有提交到暂存区时,使用命令:git status
,结果如下图所示,提示一个文件未被追踪,表示当前修改的文件未被提交到暂存区。
(2) 当文件提交到暂存区后,使用命令:git status
,结果如下图所示:
(3) 文件从暂存区提交到Git仓库后,使用命令:git status
,结果如下图所示:
2 查看历史结交记录
查看Git历史结交记录命令为: git log
,结果如下图所示:
通过命令:git log --pretty=oneline
可以查看简约版历史提交记录,结果如下图所示:
也可以通过命令:git log --oneline
可以查看简约版历史提交记录,结果如下图所示:
也可以通过命令: git reflog
查看历史记录,如下图所示,可以看到有 [email protected]{0}
和 [email protected]{1}
信息,其作用时方便后退到某一个版本,数字表示后退到当前版本需要多少步。
3 版本的前进和后退
首先查看版本提交记录,结果如下图所示:
为了方便进行版本的前进和后退操作,对 README.md
文件多进行几次修改、提交操作。
第一次修改后提交到仓库,结果如下图所示:
接下来与上面的步骤相同,第二次修改后提交到仓库,结果如下图所示:
第三次修改后提交到仓库,结果如下图所示:
第四次修改后提交到仓库,结果如下图所示:
通过命令 git reflog
查看历史提交记录,结果如下:
版本的前进和后退需要通过 指针 HEAD 来进行控制。
HEAD控制的方式有三种:
(1) 使用版本号进行操作(常用):
命令格式为:git reset --hard 版本号
(2) 使用^符号进行操作,只能后退:
命令: git reset --hard HEAD^
表示后退一个版本
命令: git reset --hard HEAD^^
表示后退两个版本
(3) 使用~符号进行操作,只能后退:
命令: git reset --hard HEAD~
表示后退一个版本;
命令: git reset --hard HEAD~~
表示后退两个版本;
命令: git reset --hard HEAD~5
表示后退5个版本;
命令: git reset --hard HEAD~n
表示后退n个版本;
注:命令参数有 soft, mixed, hard ** 三种类型:**
(1) 参数 soft 表示本地Git仓库移动HEAD指针。
(2) 参数 mixed 表示本地Git仓库移动HEAD指针,重置暂存区。
(3) 参数 hard 表示表示本地Git仓库移动HEAD指针,重置暂存区,重置工作区。
下面举例说明版本后退和前进。
使用版本号进行操作,其命令格式为:git reset --hard 版本号
后退到版本号为:1217f11的版本,命令为:git reset --hard 1217f11
,结果如下图所示:
当然也可以前进到刚才的版本:命令为:git reset --hard 4786d84
,结果如下图所示:
4 删除文件后找回文件
4 .1 Git仓库(本地库)删除文件后找回文件
假设新建一个 d123.txt
文件后提交到Git仓库,然后仓库需要删除该文件,其步骤为:
删除工作区 d123.txt
文件 ——> 提交到暂存区 ——> 提交到仓库
(1) 新建 d123.txt
文件后提交到Git仓库,如下图所示:
(2) 删除Git仓库的 d123.txt
文件
那么问题来了,工作区、暂存区和仓库中的 d123.txt 文件均被删除,该如何找回删除的文件?
此时就需要版本的后退,即可找回文件。
首先查看版本提交记录,然后退回到指定版本即可。如下图所示:
4.2 暂存区删除文件后找回文件
假设新建一个 d456.txt
文件后提交到Git仓库,然后删除文件提交到暂存区后,突然想找回该文件,此时仓库的文件并没有本删除,只需要将指针HEAD后退到提交 d456.txt
文件对应的版本即可,本质就是将调整指针HEAD的方向。
(1) 新建 d456.txt
文件后提交到Git仓库
(2) 删除暂存区的 d123.txt
文件
(3) 找回文件
步骤:通过提交记录,查询提交 d456.txt
文件至仓库的版本号,后退到该版本即可。结果如下图所示:
5 版本中的文件内容比较
对于版本之间同样文件内容比较可以使用命令 git diff
进行操作
比较文件的差异有多种情况:
- 第一种:工作区和暂存区文件比较,命令格式为:
git diff 文件名
- 第二种:工作区和Git仓库文件比较,命令格式为:
git diff HEAD 文件名
- 第三种:工作区和Git仓库 的 不同版本文件比较,命令格式为:
git diff 版本号 文件名
注:不添加文件名进行比较时,将自动比较多个相同文件名文件。
举例说明:
假设当前Git仓库有 d123.txt
和 d456.txt
文件,现在对工作区文件进行修改。
(1) 工作区文件修改,不提交到暂存区
使用命令:git diff d123.txt
进行工作区和暂存区文件比较
使用命令:git diff d456.txt
进行工作区和暂存区文件比较
当不添加文件名时(git diff
),自动比较多个文件,如下图所示:
(2) 工作区文件修改,提交到暂存区,并未提交到仓库
使用命令:git diff d123.txt
和 git diff d456.txt
将工作区文件和暂存区文件对比,如下图所示,工作区和暂存区没有区别,因为工作区文件被提交到暂存区了。
使用命令:git diff HEAD d123.txt
和 git diff HEAD d456.txt
将工作区文件(工作区文件和暂存区相同,因为工作区文件被提交到暂存区了) 和仓库文件对比,如下图所示,发现有区别了。
(3) 工作区文件修改,提交到Git仓库
使用命令 git diff HEAD d123.txt
和 git diff HEAD d456.txt
分别将工作区文件和仓库文件比较,结果如下图所示,发现没有区别。
可以通过命令: git diff 版本号 文件名
查询工作区和其他版本之间的文件比较,结果如下图所示:
参考资料
[1] https://www.bilibili.com/video/BV1bs411N7ny?p=5
[2] https://www.bilibili.com/video/BV1pW411A7a5?p=23