git 代码回滚_git代码版本管理(1)——git版本回滚

git代码版本管理(1)——git版本回滚

1、问题背景

       在利用github、gitlab、Gitee等代码管理器中对代码的管理,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交之前的样子。       本文总结了两种解决方法:回退(reset)、反做(revert)。       push前与push后。

2、git提交小知识

      使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。如下图,假设只有一个分支:每次提交都会生成一次提交的ID号(此ID号唯一)(如下图)

3502bfbc3bd612e466e432046873bde4.png

bd79828433dd5082d72bdadf7319739a.png

3、解决方式

3.1 还没有push推送到远端、只执行了本地commit提交
[root@db test]# ls     # 当前本地仓库下的文件README.md  第一次提交.txt  第二次提交.txt[root@db test]# touch 第三次提交.txt   # 新建一个文件[root@db test]# git add .[root@db test]# git commit -m '3'   # 本地提交[master aee4c30] 3 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\347\254\254\344\270\211\346\254\241\346\217\220\344\272\24                                                                                                         4.txt"[root@db test]# git log    # 查看所有提交信息commit aee4c30c17b5c916249bdcc180d3f9a912222198Author: test Date:   Mon Oct 12 16:25:02 2020 +0800    3commit fa8f987d9ac5f37b7e77cbf519825b712ee3b03aAuthor: test Date:   Mon Oct 12 16:13:31 2020 +0800    2commit ccedae5cc29205f44c2164b8f541bd28dd1197edAuthor: test Date:   Mon Oct 12 16:12:49 2020 +0800    1commit 729fd8eaa8f7ec30784bd2cdafbcc262d2f9f039Author: test Date:   Mon Oct 12 16:11:33 2020 +0800    add README[root@db test]# git reset --hard fa8f987d9ac5f37b7e77cbf519825b712ee3b03a   # 回滚到指定版本(我这里是回滚到上一个提交的commit_id)HEAD is now at fa8f987 2[root@db test]# ls   # 再次查看README.md  第一次提交.txt  第二次提交.txt[root@db test]#[root@db test]# git log  # 再次查看所有提交信息发现回滚成功commit fa8f987d9ac5f37b7e77cbf519825b712ee3b03aAuthor: test Date:   Mon Oct 12 16:13:31 2020 +0800    2commit ccedae5cc29205f44c2164b8f541bd28dd1197edAuthor: test Date:   Mon Oct 12 16:12:49 2020 +0800    1commit 729fd8eaa8f7ec30784bd2cdafbcc262d2f9f039Author: test Date:   Mon Oct 12 16:11:33 2020 +0800    add README
3.2 push推送至远端,使用 reset 回滚
  • 3.2.1适用场景:

  如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
  • 3.2.2 reset 回滚原理:

  git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,不会保存此版本后的提交,如下图

9dddab83be6646df393fb2cfb780547e.png

3.2.3开始执行回滚:

①. 查看版本号:

git log 

7cab9c68ccc90296a3f55a6b5ff1112d.png

②. 使用“git reset --hard 目标版本号”命令将版本回退:

 git reset --hard ccedae5cc29205f44c2164b8f541bd28dd1197ed

b75013a9e4c1cf2c117501d889a9572e.png

③.使用“git push -f”提交更改:

git push -f

2e14c126acf09d01a2645c6ae15f4306.png

④.验证:

497dd29daa6a73ecb21f040fce416bdc.png

至此使用reset回退成功!
3.3 push推送至远端,使用 revert回滚
  • 3.3.1 适用场景:

  如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
  • 3.3.2 revert回滚原理:

  git revert的作用是把之前提交的版本作为一个新版本再次提交(提交位置为当前版本的后一个位置,如想要回滚到版本二,当前为版本三,则重新提交的为版本四,不会像reset删除回滚之后的版本,只会还原版本二所提交的内容),以达到撤销该版本的修改的目的。如下图所示:

649ed862e065eac59e146ef3509a82d7.png

3.2.3开始执行回滚:

①. 查看版本号:

git log

931a545fe1501e151bd797413fe25fd3.png

②.使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交:

git revert -n  ccedae5cc29205f44c2164b8f541bd28dd1197edgit commit -m "revert 1 or commit 4" 

8f33b842138a85516cc5e4c94ed082c8.png

③.使用“git push”提交更改:

git push

6e0409f9a0c2e67693b04b7611e2d3c3.png

④.验证:

1、可是用 git log查看2、可以在图形化页面查看

a745a64585ed7cc7fc1d014ed6bcb145.png

反做成功!
4、其它值得注意的参数(本文回滚用的是hard)
git reset --hard HEAD^         回退到上个版本git reset --hard HEAD~3        回退到前3次提交之前,以此类推,回退到n次提交之前git reset --hard commit_id     退到/进到 指定commit的sha码git push origin HEAD --force   强推命令git reset --mixed      此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息git reset --soft       回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可git reset --hard       彻底回退到某个版本,本地的源码也会变为上一个版本的内容
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值