Git_回滚

一、问题来源

  • 在多人合作程序开发的过程中,并且以git作为远程仓库管理代码,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,所以就需要做回滚操作
  • 两种解决方法:回退(reset)、反做(revert)。

二、回退

回退操作,是会把从开始回退的版本到最新的版本之前的所有版本记录,全部抹灭,即没有操作痕迹,只能保留回退前的所有操作记录信息

  1. 若进行了四次git操作,分别对应A、B、C、D

  2. 此时发现B的代码有误,想要回滚,并且希望B之后的所有提交都撤回,那么需要找到A对应的版本号,执行命令,进行回退

    //第一步,查看所有的操作记录
    git log //查看所有的历史提交记录,按Q键可结束查看
    
    //第二步,找到B的上个版本A对应的版本号,例如A的版本号是 4b0073265f1229777999a9462789ea46393bf4a5
    git reset --hard qwetyuiop
    
    //第三步,推送到远程仓库
    git push
    
    //第四步,若第三步执行失败,执行第四步,强制推送
    git push -f
    
  3. 以下是一个具体实例供参考

    • 添加了文件 testFile.cstestFile2.cs,注释为: update testFile&testFile2
    • 推送到远程仓库
    • 查看历史操作记录
    • 回退到这个版本的上一个版本,那版本号就是上个版本的版本号
    PS E:\Eago_Git\First_Project> git pull
    Already up to date.
    PS E:\Eago_Git\First_Project> git add testFile.cs
    PS E:\Eago_Git\First_Project> git add testFile2.cs
    PS E:\Eago_Git\First_Project> git commit -m "update testFile&testFile2"
    [feature/20240318 a556e83] update testFile&testFile2
     2 files changed, 4 insertions(+), 1 deletion(-)
    PS E:\Eago_Git\First_Project> git push
    Enumerating objects: 7, done.
    Counting objects: 100% (7/7), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 434 bytes | 434.00 KiB/s, done.
    Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
    remote:
    remote: To create a merge request for feature/20240318, visit:
    remote:   https://gitlab.com/net_code/First_Project/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2F20240318
    remote:
    To https://gitlab.com/net_code/First_Project.git
       0cb467c..a556e83  feature/20240318 -> feature/20240318
    PS E:\Eago_Git\First_Project> git pull
    Already up to date.
    PS E:\Eago_Git\First_Project> git log
    
    
    commit 0cb467c0375593b8b435d3dc0f0de134ace6314a
    Date:   Wed Jul 3 16:43:39 2024 +0800
    
        uypdae testfile
    
    commit 4b0073265f1229777999a9462789ea46393bf4a5
    Date:   Tue Jun 25 10:07:24 2024 +0800
        update
    
    commit 597dcbfc83f2953957e682be09195a199c94f072
    Date:   Mon Mar 18 15:00:31 2024 +0800
    
        update
    
    commit 4573966531b4860e350db81b9467431aa9dd47ce
    Merge: a7c08a7 c268f03
    
    Date:   Mon Mar 18 14:59:01 2024 +0800
    
    PS E:\Eago_Git\First_Project> git reset -hard  4b0073265f1229777999a9462789ea46393bf4a5
    error: did you mean `--hard` (with two dashes)?
    PS E:\Eago_Git\First_Project>  git reset --hard  4b0073265f1229777999a9462789ea46393bf4a5
    HEAD is now at 4b00732 update
    PS E:\Eago_Git\First_Project> git push -f
    Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
    remote:
    remote: To create a merge request for feature/20240318, visit:
    remote:   https://gitlab.com/net_code/First_Project/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2F20240318
    remote:
    To https://gitlab.com/net_code/First_Project.git
     + a556e83...4b00732 feature/20240318 -> feature/20240318 (forced update)
    

三、反做

反做是只会回滚某一次的提交操作,某一次前后的操作还会保留

  1. 若进行了四次git操作,分别对应A、B、C、D

  2. 此时发现B的代码有误,想要回滚,并且希望B之前的都保留,B之后的所有都保留,那么需要进行反做

    //第一步,查看所有的操作记录
    git log //查看所有的历史提交记录,按Q键可结束查看
    
    //第二步,找到B的版本号,例如A的版本号是 e22428d5b5f30ea48f7b72337624f500d9821c6e
    git revert -n e22428d5b5f30ea48f7b72337624f500d9821c6e
    
    //假如B修改的文件与B之后的文件,例如C或D,有冲突,那么就会提示需要解决冲突,这时候可能需要借助可视化工具操作,手动合并解决冲突
    //hint: after resolving the conflicts, mark the corrected paths
    //hint: with 'git add <paths>' or 'git rm <paths>'
    
    
    //第三步,添加解决冲突的文件,若没有冲突的文件,可跳过这一步
     git add testFile.cs
    
    //第四步,提交
    git commit -m "update  merge"
    
    //第五步,推送
     git push
    
  3. 以下是一个具体实例供参考

    • 第一次,testFile文件和testFile2文件都添加了内容 你好
    • 第二次,testFile文件把 你好 中间加个 1
    • 第三次,两个文件都新增一行内容 我还
    • 反做第二次的操作,这时候testFile肯定会冲突,因为第二次和第三次操作的是同一个文件,所以需要手动解决
    • 添加提交推送冲突
    PS E:\Eago_Git\First_Project> git add testFile.cs
    PS E:\Eago_Git\First_Project> git add testFile2.cs
    PS E:\Eago_Git\First_Project> git commit -m "update 你好"
    [feature/20240318 4844278] update 你好
     2 files changed, 7 insertions(+), 1 deletion(-)
    PS E:\Eago_Git\First_Project> git push
    Enumerating objects: 7, done.
    Counting objects: 100% (7/7), done.
    Writing objects: 100% (4/4), 437 bytes | 437.00 KiB/s, done.
    Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
    remote: To create a merge request for feature/20240318, visit:
    remote:   https://gitlab.com/net_code/First_Project/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2F20240318
    remote:
    To https://gitlab.com/net_code/First_Project.git
       7aaa627..4844278  feature/20240318 -> feature/20240318
    PS E:\Eago_Git\First_Project> git add testFile.cs
    PS E:\Eago_Git\First_Project> git commit -m "update testFile 你1好"
    [feature/20240318 e22428d] update testFile 你1好
     1 file changed, 1 insertion(+), 1 deletion(-)
    PS E:\Eago_Git\First_Project> git push
    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 298 bytes | 298.00 KiB/s, done.
    Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
    remote:
    remote: To create a merge request for feature/20240318, visit:
    remote:   https://gitlab.com/net_code/First_Project/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2F20240318
    remote:
    To https://gitlab.com/net_code/First_Project.git
       4844278..e22428d  feature/20240318 -> feature/20240318
    PS E:\Eago_Git\First_Project> git add testFile.cs
    PS E:\Eago_Git\First_Project> git commit -m "update testFile add 我还"
    [feature/20240318 1407596] update testFile add 我还
     1 file changed, 3 insertions(+), 1 deletion(-)
    PS E:\Eago_Git\First_Project> git push
    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 306 bytes | 306.00 KiB/s, done.
    Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
    remote:
    remote: To create a merge request for feature/20240318, visit:
    remote:   https://gitlab.com/net_code/First_Project/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2F20240318
    remote:
    To https://gitlab.com/net_code/First_Project.git
       e22428d..1407596  feature/20240318 -> feature/20240318
    PS E:\Eago_Git\First_Project> git log
    
    Date:   Wed Jul 3 16:56:03 2024 +0800
    
        update testFile add 我还
    
    Date:   Wed Jul 3 16:55:05 2024 +0800
    
    
    commit 4844278787d4007930715010a9a3df5fb6d9eb61
    
    Date:   Wed Jul 3 16:53:34 2024 +0800
    
        update 你好
    
    commit 7aaa6279597434926c735f90bfabb3b74102581d
    
    Date:   Wed Jul 3 16:51:53 2024 +0800
    
        merge testFile
    
    
    Date:   Wed Jul 3 16:49:20 2024 +0800
    
        update
    PS E:\Eago_Git\First_Project> git revert -n e22428d5b5f30ea48f7b72337624f500d9821c6e
    Auto-merging testFile.cs
    CONFLICT (content): Merge conflict in testFile.cs
    error: could not revert e22428d... update testFile 你1好
    hint: after resolving the conflicts, mark the corrected paths
    hint: with 'git add <paths>' or 'git rm <paths>'
    PS E:\Eago_Git\First_Project> git add testFile.cs
    PS E:\Eago_Git\First_Project> git commit -m "update  merge"
    [feature/20240318 f680724] update  merge
     1 file changed, 2 insertions(+), 2 deletions(-)
    PS E:\Eago_Git\First_Project> git push
    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 293 bytes | 293.00 KiB/s, done.
    Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
    remote:
    remote: To create a merge request for feature/20240318, visit:
    remote:   https://gitlab.com/net_code/First_Project/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2F20240318
    remote:
    To https://gitlab.com/net_code/First_Project.git
       1407596..f680724  feature/20240318 -> feature/20240318
    PS E:\Eago_Git\First_Project> git pull
    Already up to date.
    
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值