我正在参加「掘金·启航计划」
什么是reset?
reset:将指针重置到某个提交点的意思(注意这里的提交是未经过push同步到远程仓库的提交)。如果使用了push,这里就需要搬出revert了。
执行reset会发生什么?
git reset --hard HEAD^^
如图:指针会重置到提交点2,丢弃2之后的提交。
这里需要补一个知识点,需要了解git 的三个区域:git分三个暂存区、工作区、版本库
- 工作区: 就是你在电脑里能看到的目录。
- 暂存区: 就是被git标记还没提交的区域。英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库: 就是已经提交的文件。工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
不同参数的重置,效果不同
reset --hard 不仅可以撤销提交,还可以用来把 HEAD 和 branch 移动到其他的任何地方。
reset --hard:重置工作区
你的工作目录里的内容会被完全重置为和
HEAD的新位置相同的内容。换句话说,就是你的未提交的修改会被全部擦掉。
reset不加参数:保留工作区,并清空暂存区
也就是说,工作目录的修改、暂存区的内容以及由
reset所导致的新的文件差异,都会被放进工作目录。
reset --soft:保留工作区
保留工作目录和暂存区中的内容,并把重置
HEAD所带来的新的差异放进暂存区。
什么是revert?
revert:撤回远程仓库提交
push过的提交存在以下两种情况撤回:
- 出错的内容在你自己的分支
在本地修改了错误的commits,然后强制push上去,问题就解决了。
- 出错的内容已经合并到
master
git revert HEAD^
结束
大家可以新建一个空项目做实操,这样体会才更深刻。