Git使用小技巧之回滚与撤销详解

所属分类: 网络编程 / 相关技巧 阅读数: 421
收藏 0 赞 0 分享

前言

日常的开发,我们难免会创建错误的git提交记录,整个时候git给我们提供了两个命令来解决这个问题。一个命令是git reset,另一个是git revert。两者有啥区别呢?两者主要的区别是,git reset命令是回滚某次提交,被回滚的提交将不会出现在提交记录中,而git revert命令是创建一个新的提交来达到撤销的目的,被撤销的提交和撤销的提交都会出现在提交记录中。

准备

首先呢,我们还是需要准备一个git仓库,并且准备一个可以修改的文件,文件名无所谓,我这里就创建了一个README.md文件:

mkdir git-test
cd git-test
git init
touch README.md
git add *
git commit -m "init"

git reset

1.修改README文件。

2.提交这次修改。

git commit "错误的提交"

3.假设刚刚的提交是个错误的,我们需要回退,这个是个git reset命令就有用武之地了,我们可以使用它回退到指定的提交。

$ git reset e431092f22a85deebf7bd6f4f96d9943530b49bf
Unstaged changes after reset:
M  README.md

4.我们在使用git status查看状态,会发现README文件处于一个被修改的状态,并且内容没有发生变化。也就是说git reset会将本地仓库的指针知到你指定的分支,但是内容不会丢弃,而是放到了工作区,如果你想再次提交还是可以的。

$ git status
On branch master
Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)

  modified: README.md

no changes added to commit (use "git add" and/or "git commit -a")

如果你想直接丢弃掉,可以加上--hard参数即可。其实git reset有三种回滚方式:

git reset --hard <回滚分支>
git reset --soft <回滚分支>
git reset --mixed <回滚方式>
  • --hard回滚分支到当前所在分支之间修改的内容将会被完全丢弃掉。
  • --soft会将修改的内容放到暂存区,你仍然可以使用git commit命令提交。
  • --mixed则是reset的默认参数,也就是你不指定参数的话,会默认使用--mixed回滚,这种回滚方式会将修改的内容放到工作区。

git revert

有些情况下我们可能不太希望错误的提交记录被完全抹除掉,还是希望它保存在git的提交记录中,万一我们撤销出错了还可以有补救的机会。这中情况下我们就需要使用git revert命令来实现。

1.我们来查看下当前git仓库的提交记录。

$ git log
commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299 (HEAD -> master)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 18:08:30 2019 +0800

 错误的提交

commit e431092f22a85deebf7bd6f4f96d9943530b49bf
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 17:23:44 2019 +0800

 init

2.现在我们需要将这个错误的提交撤销掉,执行下面的命令就可以了。

git revert 28aef5f811895f7124a3ae0e3b095a37ef9cb299

在执行的过程中会跳出来一个VI编辑界面,让我们编辑撤销提交的message信息,默认为Revert "被撤销提交的message",当然我们可以进行编辑。

3.在使用git log命令查看提交日志,我们会发现被撤销的提交和撤销的提交都出现在提交记录中,然后你去查看README文件的内容,会发现已经回滚回去了。

$ git log
commit ef836162c8f4cf75086151e517339789dd937453 (HEAD -> master)
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 18:13:27 2019 +0800

 Revert "错误的提交"

 This reverts commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299.

commit 28aef5f811895f7124a3ae0e3b095a37ef9cb299
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 18:08:30 2019 +0800

 错误的提交

commit e431092f22a85deebf7bd6f4f96d9943530b49bf
Author: 代码无止境 <gancy.programmer@gmail.com>
Date: Sun Jun 23 17:23:44 2019 +0800

 init

结束语

这篇文章,主要是讲了回滚错误提交的两种方式,平时的使用场景还是挺多的,希望对大家能够有所帮助。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

程序员编程从初级到中级的10个秘诀

在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分成两类:面向初学者类(“hello world”这种类型的教程)以及面向专家类(MSDN杂志)。
收藏 0 赞 0 分享

关于换行和回车的图文小结

不知道大家用这么多年的电脑,写了这么多的程序,对换行和回车有没有一个认识
收藏 0 赞 0 分享

回车和换行有什么区别?我们平时按下的Enter键是回车还是换行

如果用过机械打字机,就知道回车和换行的区别了。换行就是把滚筒卷一格,不改变水平位置。回车就是把水平位置复位,不卷动滚筒
收藏 0 赞 0 分享

网络编程之get与post的区别与联系

这里来说说get与post的区别与联系,对这方面不懂的鹏哟可以参考下。
收藏 0 赞 0 分享

Web开发人员常用速查手册 英文集合推荐

不管你是多么优秀的程序员,你都不可能记住一切。在你编写程序的过程中碰到问题需要查阅手册的时候,若有现成的手册可参考则可以为你节省很多时间。
收藏 0 赞 0 分享

vs快捷键 用好Ctrl+Enter与Ctrl+Shift+Enter组合键让你的编辑代码速度快了很多

使用Ctrl+Enter组合键在上方插入一行,使用Ctrl+Shift+Enter组合键在下方插入一行
收藏 0 赞 0 分享

对Web开发人员有用的8个网站小结

本文是由比利时的Web开发人员Jean-Baptiste Jung分享的,Jung还在《Web开发/设计人员应当知道的15个网站》这篇文章中推荐了15个相关网站
收藏 0 赞 0 分享

Web开发/设计人员应当知道的15个网站

建个好网站绝非易事,工欲善其事必先利其器。本文编译了15个极其有用的网站,任何一位网站开发者或设计人员都应该收藏起来
收藏 0 赞 0 分享

Application,Session,Cookies对象应用介绍

Application,Session,Cookies对象比较,对于客户端保存登录信息的朋友可以参考下。
收藏 0 赞 0 分享

设计高可用和高负载的网站系统的几个注意事项

随着网站的运营,用户访问量和数据存储量会随着时间发生几何级变化,很快整个系统不堪重负,频繁出现问题。
收藏 0 赞 0 分享
查看更多