Advertisement

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

阅读量:

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

复制代码
    $ git log
    commit efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546 (HEAD -> main)
    Author: zjxht62 <zhao_ji_xiang@126.com>
    Date:   Tue Apr 20 11:51:31 2021 +0800
    
    feat:readme.txt增加一行
    
    commit d9036113c8c0a31f3958e0a8d1f1ee9a5331a871 (origin/main)
    Author: zjxht62 <zhao_ji_xiang@126.com>
    Date:   Thu Apr 15 18:01:11 2021 +0800
    
    新增文件file1.txt
    
    commit bdbb0646e837d90ecfb0e1d0786fe5824adf3d53
    Author: zjxht62 <zhao_ji_xiang@126.com>
    Date:   Thu Apr 15 17:58:15 2021 +0800
    
    测试-a命令
    
    commit 76c60afba5fcbd0bba50f4dfce58c868ffe79270
    :...skipping...
    commit efe6ed2a7a98da8ca4b22d2e5ca0713c335e5546 (HEAD -> main)
    Author: zjxht62 <zhao_ji_xiang@126.com>
    Date:   Tue Apr 20 11:51:31 2021 +0800
    
    feat:readme.txt增加一行
    
    commit d9036113c8c0a31f3958e0a8d1f1ee9a5331a871 (origin/main)
    Author: zjxht62 <zhao_ji_xiang@126.com>
    Date:   Thu Apr 15 18:01:11 2021 +0800
    
    新增文件file1.txt
    
    commit bdbb0646e837d90ecfb0e1d0786fe5824adf3d53
    Author: zjxht62 <zhao_ji_xiang@126.com>
    Date:   Thu Apr 15 17:58:15 2021 +0800
    
    测试-a命令
    
    commit 76c60afba5fcbd0bba50f4dfce58c868ffe79270
    Author: zjxht62 <zhao_ji_xiang@126.com>
    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 <zhao_ji_xiang@126.com>
    Date:   Tue Apr 20 15:15:53 2021 +0800
    
    feat:增加第二行,要保留此次commit
    
    commit 29a4c0bb3a0b1eb19b0a570a84501402656c2706
    Author: zjxht62 <zhao_ji_xiang@126.com>
    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
    在这里插入图片描述

  2. 执行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后生成一个新的版本
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~