一 『现学现忘』Git后悔药 — 32、revert撤销( 二 )

git reset 命令去回退代码,原因与上述一样 。所以,我们需要找到一个命令,既可以回退代码,又可以保存错误的提交 。这时 git revert 命令就派上用场了 。
命令:git revert <commit>
演示:
# 1.撤销第四次提交L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/revert_test (master)$ git revert c04b29c[master d0c8e48] Revert "第5次提交,revert 撤销第4次提交" 1 file changed, 1 deletion(-)# 之后会弹出一个编辑文本框,来让你写新生成提交的注释,如下图 。# 2.查看版本库历史提交记录L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/revert_test (master)$ git log --onelined0c8e48 (HEAD -> master) Revert "第5次提交,revert 撤销第4次提交"c04b29c 第4次提交,新增内容:revert test v4fd819dc 第3次提交,新增内容:revert test v3c71ae3c 第2次提交,新增内容:revert test v2557f7c3 第1次提交,新增readme.txt文件# 可以看到第4次提交的commit依然存在 。# 3.查看readme.txt文件内容L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/revert_test (master)$ cat readme.txtrevert test v1revert test v2revert test v3# 可以看到V4 版本内容已经没有了 。如下图所示:

一 『现学现忘』Git后悔药 — 32、revert撤销

文章插图
这里需要说明一下:
git revert命令的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针,是指向这个新生成的版本,而不是目标版本 。
使用 git revert 命令来实现上述例子的话,我们可以这样做:先 revert commit-4,再 revert commit-3 (有多个提交需要回退的话需要由新提交到旧提及哦啊进行 revert) 。
我们继续同样的操作步骤,把第三次提交也撤销掉 。
# 1.撤销第3次提交L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/revert_test (master)$ git revert fd819dc[master 30f7626] Revert "第6次提交,revert 撤销第3次提交" 1 file changed, 1 deletion(-)# 2.查看版本库历史提交记录L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/revert_test (master)$ git log --oneline30f7626 (HEAD -> master) Revert "第6次提交,revert 撤销第3次提交"d0c8e48 Revert "第5次提交,revert 撤销第4次提交"c04b29c 第4次提交,新增内容:revert test v4fd819dc 第3次提交,新增内容:revert test v3c71ae3c 第2次提交,新增内容:revert test v2557f7c3 第1次提交,新增readme.txt文件# 3.查看readme.txt文件内容L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/revert_test (master)$ cat readme.txtrevert test v1revert test v2通过上面练习,我们可以得出,git reset撤销和git revert撤销的区别,如下图所示:
一 『现学现忘』Git后悔药 — 32、revert撤销

文章插图
(2)revert命令说明git revert <commit>命令:
  1. 这个命令会生成一个新的提交记录,新的提交记录就是把需要移除的提交撤销掉,所生成的新提交 。
  2. 如果工作区或暂存区还有修改未提交,那么会提示需要先提交或存储起来这些文件 。
  3. 如果在移除的过程中发生了冲突,可以在解决了冲突后,使用 git add 命令添加修改的冲突文件到暂存区中,在使用 git revert --continue 来继续操作 。如果不想继续操作,当然也可以使用 git revert --abort 命令来停止移除操作,恢复到执行git revert <commit>命令之前的状态 。
  4. 如果revert移除的过程中出现冲突,需要把这些冲突解决才可以继续操作 。我们可以使用 git revert --skip 命令来跳过一个commit的冲突解决 。如果后续还有冲突,也同样如此进行跳过,直到全部冲突解决完成 。但是使用

    经验总结扩展阅读