欢迎来到无荨的博客

想一千次,不如去做一次。如果自己不努力,那么这一辈子只可能在原地踏步!

Git的回滚

 

Git常用命令:
git add .               #进行提交
git commit -m v2            #v2版本
cat index.html              #查看文件内容已经变化
git log                  #获取到提交信息
git reset --hard 50127d43d2dc      #执行回滚,后面需要跟commit ID
cat index.html             #再次查看文件内容发现已经回滚到v1版本
git log                 #发现无法获取到v2版本commt id
git reflog               #获取到所有的历史提交信息
git reset --hard 7ff3f54        #回滚到版本2

git不同阶段回滚
  1.工作目录
  2.暂存区域
  3.仓库版本回滚

演示:撤销工作区的内容

第一步:创建一个文件

[root@docker2 git_test]# cat 1.txt 
11111
222
[root@docker2 git_test]# echo 'test1' >> 1.txt
[root@docker2 git_test]# echo 'test2' >> 1.txt

第二步:把这个文件添加到缓存区

[root@docker2 git_test]# git add .

第三步:在文件追加内容

在包含.git的目录中,只要当前目录下的文件有修改都会自动进入工作区(该文件必须被commit过,否则无法追踪)

所以下面当往文件e.tt中添加test3的时候。e.tt这个文件就进入到了工作区了。

  1.文件进入工作区 :包含.git隐藏文件的目录中,文件修改就会自动进入

  2.文件进入缓存区 :git add .

  3.文件进入仓库  :git commit -m ‘v1’

[root@docker2 git_test]# echo "test3" >> 1.txt 

第四步:查看工作区

[root@docker2 git_test]# git status

# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 修改: 1.txt
#
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: 1.txt
# 

第五步:撤销工作区的内容

使用命令git checkout — filename即可进行回滚
[root@docker2 git_test]# git checkout -- 1.txt #数据回滚
[root@docker2 git_test]# git status #查看状态
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 修改: 1.txt
#
[root@docker2 git_test]# cat 1.txt #查看文件内容,发现test3内容已经没有了
11111
222
test1
test2

演示:撤销缓存区的内容

第一步:创建文件并进行提交

 

[root@ken kenken]# echo "1111">k.tt
[root@ken kenken]# git add k.tt
[root@ken kenken]# git commit -m "k.tt"
[root@ken kenken]# git log
commit c5f46907ce0dfd6722b091fa7a7053ff48507ace
Author: ken <1614833@qq.com>
Date: Tue Nov 20 12:42:30 2018 +0800

k.tt

 

第二步:修改文件并加入到缓存区中
第一步一定要提交,才能看到效果

[root@docker2 git_test]# echo 666 >> 1.txt 
[root@docker2 git_test]# echo 777 >> 1.txt 
[root@docker2 git_test]# git add .
[root@docker2 git_test]# git status

# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 修改: 1.txt

第三步:缓存区进行回退

[root@docker2 git_test]# git reset HEAD 1.txt 

重置后撤出暂存区的变更:
M 1.txt

第四步:缓存区进行回退

[root@docker2 git_test]# git status

# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: 1.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

第五步:工作区进行回滚
其实现在就已经回到了演示2中了
回退完成之后可以发现之前写的666和777 已经没有了

[root@docker2 git_test]# git checkout -- 1.txt 
[root@docker2 git_test]# git status
# 位于分支 master
无文件要提交,干净的工作区
[root@docker2 git_test]# cat 1.txt 
11111
222

演示:撤销仓库中的内容

第一步:查看历史版本
我们现在处于1.txt中,现在希望回到v3中

[root@docker2 git_test]# git log
commit a7dbf086621335d775596ba834150d0407bcb736
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 20:40:32 2019 +0800

v4

commit baeec2884d5d9fec0e17eac4069dcc6ce1e39595
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 20:40:02 2019 +0800

v3

commit 14820ed1cce6df5e5a5d5129f8fd0c5f54bf5b8a
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 19:48:16 2019 +0800

v2

commit 72b6d22dfbba2b0f01c74bf0ea105875b8b2edf8
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 19:44:12 2019 +0800

v1

 

第二步:查看所需要回滚的版本的commit值
通过上面我们可以看到v3的commit值commit baeec2884d5d9fec0e17eac4069dcc6ce1e39595

第三步:执行回滚操作
commit值没有必要全部写出来,只要写一部分就可以了

[root@docker2 git_test]# git reset --hard baeec2884d
HEAD 现在位于 baeec28 v3

第四步:查看版本状态
现在我们处于v3版本之中

[root@docker2 git_test]# git log
commit baeec2884d5d9fec0e17eac4069dcc6ce1e39595
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 20:40:02 2019 +0800

v3

commit 14820ed1cce6df5e5a5d5129f8fd0c5f54bf5b8a
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 19:48:16 2019 +0800

v2

commit 72b6d22dfbba2b0f01c74bf0ea105875b8b2edf8
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 19:44:12 2019 +0800

v1

第五步:回退到v4版本中
我们知道回退版本需要用到commit值
但是现在通过git log已经看不到v4的commit值了,现在怎么办呐?
可以通过git reflog查看所有的历史操作
找到v4前面的值即可

[root@docker2 git_test]# git reflog
baeec28 HEAD@{0}: reset: moving to baeec2884d
a7dbf08 HEAD@{1}: commit: v4
baeec28 HEAD@{2}: commit: v3
14820ed HEAD@{3}: reset: moving to 14820ed
72b6d22 HEAD@{4}: reset: moving to 72b6d22dfbba2b0f01c74bf0ea105875b8b2edf8
14820ed HEAD@{5}: commit: v2
72b6d22 HEAD@{6}: commit (initial): v1

第六步:回滚到v4版本

root@docker2 git_test]# git reset --hard a7dbf08
HEAD 现在位于 a7dbf08 v4
[root@docker2 git_test]# git log
commit a7dbf086621335d775596ba834150d0407bcb736
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 20:40:32 2019 +0800

v4

commit baeec2884d5d9fec0e17eac4069dcc6ce1e39595
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 20:40:02 2019 +0800

v3

commit 14820ed1cce6df5e5a5d5129f8fd0c5f54bf5b8a
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 19:48:16 2019 +0800

v2

commit 72b6d22dfbba2b0f01c74bf0ea105875b8b2edf8
Author: wuxun <1449460157@qq.com>
Date: Mon Nov 11 19:44:12 2019 +0800

v1
posted @ 2019-11-26 09:10  无荨  阅读(406)  评论(0编辑  收藏  举报