git命令之reset与revert

215 阅读2分钟

我正在参加「掘金·启航计划」

什么是reset

reset:将指针重置到某个提交点的意思(注意这里的提交是未经过push同步到远程仓库的提交)。如果使用了push,这里就需要搬出revert了。

执行reset会发生什么?

git reset --hard HEAD^^ 

如图:指针会重置到提交点2,丢弃2之后的提交。

image.png

这里需要补一个知识点,需要了解git 的三个区域:git分三个暂存区、工作区、版本库

  • 工作区: 就是你在电脑里能看到的目录。
  • 暂存区: 就是被git标记还没提交的区域。英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库: 就是已经提交的文件。工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
不同参数的重置,效果不同

reset --hard 不仅可以撤销提交,还可以用来把 HEADbranch 移动到其他的任何地方。

  • reset --hard:重置工作区

你的工作目录里的内容会被完全重置为和 HEAD 的新位置相同的内容。换句话说,就是你的未提交的修改会被全部擦掉。

  • reset 不加参数:保留工作区,并清空暂存区

也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。

  • reset --soft:保留工作区

保留工作目录和暂存区中的内容,并把重置HEAD 所带来的新的差异放进暂存区。

什么是revert?

revert:撤回远程仓库提交 push过的提交存在以下两种情况撤回:

  1. 出错的内容在你自己的分支

在本地修改了错误的commits,然后强制push上去,问题就解决了。

  1. 出错的内容已经合并到 master

git revert HEAD^

结束

大家可以新建一个空项目做实操,这样体会才更深刻。