Skip to content

Git-revert和reset

1. git reset

1.1 设计目的

  • 用以重设本地的更改,可以实现本地状态的回退
  • 比如git reset --hard <hash-commit>可以实现对某一个提交哈希状态的回退。回退之后,分支上在此之后的所有commit都会丢失(可以通过git reflog进行找回)
  • 关于参数,请参考[[Git-reset当中的soft、hard、mixed]]

1.2 实际使用

  • git reset HEAD ?

    • 重写staging area里面的目录树,被master所指向的目录树进行替换,但是work space不受影响。
    • 就是把版本回退到HEAD所指向的状态。
    • 可以用来清空staging area暂存的内容
  • 另外一个场景,比如只有一个本地分支,然后需要回退状态,此时就可以利用git reset进行操作。 image.png

2. git revert

2.1 设计目的

  • 用以撤销已经push到远程多人仓库的commit
  • 利用全新的commit来取代指定的commitHEAD状态依然往后走 image.png

2.2 实际使用

  • 如果git revert两次,那么相当于多了两次commit,但是内容并没有变化
  • 比如原始状态如下图所示: image.png|325
  • 想要回退到c5状态,那么只需要git revert ac79aa即可 image.png|300
  • 注意!!
  • 不是将状态回退到C5状态,而是**将C5提交引起的相关修改全部还原**,C6等等另外的提交不变。
  • 因此,一旦发现出错之后,就应当立即进行git revert回退,否则就需要git revert多个commit