git版本回退的两种方式reset和revert

git log命令查看历史记录,从上到下,从现在到从前

$ git log
commit efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546 (HEAD -> main)
Author: zjxht62 <[email protected]>
Date:   Tue Apr 20 11:51:31 2021 +0800

    feat:readme.txt增加一行

commit d9036113c8c0a31f3958e0a8d1f1ee9a5331a871 (origin/main)
Author: zjxht62 <[email protected]>
Date:   Thu Apr 15 18:01:11 2021 +0800

    新增文件file1.txt

commit bdbb0646e837d90ecfb0e1d0786fe5824adf3d53
Author: zjxht62 <[email protected]>
Date:   Thu Apr 15 17:58:15 2021 +0800

    测试-a命令

commit 76c60afba5fcbd0bba50f4dfce58c868ffe79270
:...skipping...
commit efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546 (HEAD -> main)
Author: zjxht62 <[email protected]>
Date:   Tue Apr 20 11:51:31 2021 +0800

    feat:readme.txt增加一行

commit d9036113c8c0a31f3958e0a8d1f1ee9a5331a871 (origin/main)
Author: zjxht62 <[email protected]>
Date:   Thu Apr 15 18:01:11 2021 +0800

    新增文件file1.txt

commit bdbb0646e837d90ecfb0e1d0786fe5824adf3d53
Author: zjxht62 <[email protected]>
Date:   Thu Apr 15 17:58:15 2021 +0800

    测试-a命令

commit 76c60afba5fcbd0bba50f4dfce58c868ffe79270
Author: zjxht62 <[email protected]>
Date:   Thu Apr 15 17:47:25 2021 +0800

    添加了一个readme文件

git log --pretty=oneline

$ git log --pretty=oneline
efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546 (HEAD -> main) feat:readme.txt增加一行
d9036113c8c0a31f3958e0a8d1f1ee9a5331a871 (origin/main) 新增文件file1.txt
bdbb0646e837d90ecfb0e1d0786fe5824adf3d53 测试-a命令
76c60afba5fcbd0bba50f4dfce58c868ffe79270 添加了一个readme文件

1.reset:回退操作

在git中,HEAD代表当前版本,上一个版本就是HEAD^,同理上上个版本就是HEAD^^,上100个版本可以写成HEAD~100
回退到上一个版本,而且之后的提交都不要了

$ git reset --hard HEAD^
HEAD is now at d903611 新增文件file1.txt

也可以通过commit id来跳转到之前或之后的某一次提交

$ git reset --hard efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546
HEAD is now at efe6ed2 feat:readme.txt增加一行

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:
┌────┐
│HEAD│
└────┘

└──> ○ append GPL

○ add distributed

○ wrote a readme file

改为指向add distributed:
┌────┐
│HEAD│
└────┘

│ ○ append GPL
│ │
└──> ○ add distributed

○ wrote a readme file
然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

**慎用:**强行同步远端git push --force

查看每次执行的命令

git reflog

$ git reflog
efe6ed2 (HEAD -> main) HEAD@{
    
    0}: reset: moving to efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546
d903611 (origin/main) HEAD@{
    
    1}: reset: moving to HEAD^
efe6ed2 (HEAD -> main) HEAD@{
    
    2}: commit: feat:readme.txt增加一行
d903611 (origin/main) HEAD@{
    
    3}: Branch: renamed refs/heads/master to refs/heads/main
d903611 (origin/main) HEAD@{
    
    5}: commit: 新增文件file1.txt
bdbb064 HEAD@{
    
    6}: commit: 测试-a命令
76c60af HEAD@{
    
    7}: commit (initial): 添加了一个readme文件

2.revert:反做

revert实现的是撤销之前某一commit,但是同时保留之后的commit,记录下整个版本变动流程,就可以使用revert

比如:我要撤销‘增加一行中文’,但是要保留‘feat:增加第二行,要保留此次commit’

$ git log
commit a1afbedab893e66b1f2f0db01199360f822e3ad2 (HEAD -> main)
Author: zjxht62 <[email protected]>
Date:   Tue Apr 20 15:15:53 2021 +0800

    feat:增加第二行,要保留此次commit

commit 29a4c0bb3a0b1eb19b0a570a84501402656c2706
Author: zjxht62 <[email protected]>
Date:   Tue Apr 20 15:14:28 2021 +0800

    feat:增加一行中文

也就是文件中

Git is a version control system.
Git is a free software.
Git is Diao.
Git is Niu.
Git is Haha.
新增一条                 //这一行被撤销
增加第二行								//这一行保留
  1. 先用git log命令找出要revert的版本的commit id,是:29a4c0bb3a0b1eb19b0a570a84501402656c2706

在这里插入图片描述

  1. 执行git revert -n 29a4c0bb3a0b1eb19b0a570a84501402656c2706
$ git revert -n 29a4c0bb3a0b1eb19b0a570a84501402656c2706
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
error: could not revert 29a4c0b... feat:增加一行中文
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'

  1. 此时可能出现冲突,需要手动解决
Git is a version control system.
Git is a free software.
Git is Diao.
Git is Niu.
<<<<<<< HEAD
Git is Haha.
新增一条
增加第二行
=======
Git is Haha.
>>>>>>> parent of 29a4c0b (feat:增加一行中文)

解决好后通过git add命令暂存修改,之后提交代码

Administrator@DESKTOP-RMO2H0L MINGW64 /e/zjx/learngit (main|REVERTING)
$ git add readme.txt

Administrator@DESKTOP-RMO2H0L MINGW64 /e/zjx/learngit (main|REVERTING)
$ git commit -m 'revert 添加一行'
[main 048bd79] revert 添加一行
 1 file changed, 1 insertion(+), 2 deletions(-)

可以发现revert后生成一个新的版本
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zjxht62/article/details/116042888
今日推荐