本文主要是介绍在实际开发过程中,对于Git的一些操作,用来给大家分享的同时,也用以记录。对于稍微复杂点的操作,我会配上图文例子
Git 结构
如果你有时间,可以直接看这篇别人家的高端文章,清晰易懂比较清晰的讲git结构和版本回退的
强烈推荐看一看,尤其是结合那些图:head,索引和工作区。
版本回退之 reset
soft,默认参数与hard
- soft
试想一个场景,你add了好多东西,而且commit了,但是push之前后悔了,不应该在master上提交,还是想撤销了这些commit,然后暂存一下,再搞其他的。那么怎么撤销提交呢。
就可以用soft参数了。soft仅仅是将HEAD回到你指定的地方,仅此而已,索引(暂存区)和工作区(你编辑文件的地方)都不变。1
git reset --soft 目的版本号
执行此命令仅仅是撤销了commit,并没有撤销add,因为索引没变化。所以这时候你执行git status
,看到的是add之后的状态,待提交。
- 默认参数
add并且提交了commit1
与commit2
的修改,此时二者被放到了本地仓库,且本地的head已经指向了这个提交。那么这时候只想提交一个,而不是提交两个,怎么办呢?
如下图:
做法:git log
找到你要回退的目的地,然后执行1
git reset 你的目的地的版本号
这个命令就完成了两步:
1、将本地仓库HEAD指针回退一下;
2、索引(暂存区)的指向也回退一下,工作区的东西不动。
如此,就回到了仅仅修改没有add,没有提交的状态了。
git status
查看如下图了,发现两个文件又回到了未add和commit的状态:
- hard
如果你已经提交了,但是又想完全抛弃这些提交,撤销add,连工作区的那些更改也都撤销,这时候你需要1
git reset --hard 目的地版本号
如果你不小心执行了这个,发现没必要回退,又想找回来已经提交的,那没问题。1
git reset --hard 想找回的提交ID
即可,毕竟这些命令指示移动各种指针,又没有删除节点。
当然了,--hard
会覆盖掉你没提交的那些文件的,而且再也找不回来的。