Git回滚指定的文件
GIT
前文介绍过Git回滚,回滚的上某个提交,Git也可以回滚某个提交的某个文件
如果对git reset不太熟悉,可以参考前文:Git回滚代码(git reset)
通过指定文件文件回滚
现在对一个文件test.txt已经经过了三次提交,文件内容从v1->v2->v3。先看看提交历史,查看历史通过git log命令。
$ git log
commit e54cfa3872518a8c9d14c1c778b76d1963999338 (HEAD -> master)
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:37:20 2022 +0800
v3
commit 618d1658b3635e0529a3347aedf1413e57bf9568
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:36:45 2022 +0800
v2
commit 360b025b94d2bfa4933be4a69c14ab8cf8527d11
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:35:14 2022 +0800
v1
HEAD
此时修改了工作区的test.txt内容为v4并且提交到暂存区后,如果想撤回可以执行命令git reset HEAD test.txt,执行后暂存区的内容会回滚到v3。
修改工作区和暂存区的文件版本:
修改工作区和暂存区的文件版本
执行reset后的版本:
执行reset后的版本
$ git ls-files -s
100644 c694117fd4e76c22ae04348c15861413019aa03b 0 test.txt
$ git cat-file -p c694117fd4e76c22ae04348c15861413019aa03b
v4
$ git reset HEAD test.txt
Unstaged changes after reset:
M test.txt
$ git ls-files -s
100644 b3b96777307e3b8d0e833c26b6d28cd202056e5c 0 test.txt
$ git cat-file -p b3b96777307e3b8d0e833c26b6d28cd202056e5c
v3
$ cat test.txt
v4
上面的命令git ls-files -s是查看暂存区的文件,git cat-file -p commit-id查看某个提交的文件内容,在回滚前文件是v4,执行完暂存区的文件内容为v3,而工作区的内容为v4。
此时的HEAD的指针上不变的,通过git log查看:
$ git log -1
commit e54cfa3872518a8c9d14c1c778b76d1963999338 (HEAD -> master)
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:37:20 2022 +0800
v3
git reset HEAD
回滚指定提交的文件
使用git reset指定路径可以回滚某次提交的文件,使用的命令为git reset
当前的版本
执行git reset
reset后的版本
$ git log
commit e54cfa3872518a8c9d14c1c778b76d1963999338 (HEAD -> master)
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:37:20 2022 +0800
v3
commit 618d1658b3635e0529a3347aedf1413e57bf9568
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:36:45 2022 +0800
v2
commit 360b025b94d2bfa4933be4a69c14ab8cf8527d11
Author: Java猿 <1351891797@qq.com>
Date: Sat Jun 25 10:35:14 2022 +0800
v1
$ git ls-files -s
100644 b3b96777307e3b8d0e833c26b6d28cd202056e5c 0 test.txt
$ git cat-file -p b3b96777307e3b8d0e833c26b6d28cd202056e5c
v3
$ cat test.txt
v3
$ git reset 360b025b94d2bfa4933be4a69c14ab8cf8527d11 test.txt
Unstaged changes after reset:
M test.txt
$ git ls-files -s
100644 28c218c44b49222f91536daf5b4d9871638edc8e 0 test.txt
$ git cat-file -p 28c218c44b49222f91536daf5b4d9871638edc8e
v1
$ cat test.txt
v3
后续把git的回滚操作录个视频,欢迎留言讨论,谢谢!