首先git是分布式版本管理控制系统,在他的架构中分为以下几个区域
图中每一个流程代表一个开发人员
git reset 命令之 --hard --mixed --soft 的区别
命令:git reset --hard 版本号
- soft:仅仅移动当前Head指针,不会改变工作区和暂存区的内容;即回到将文件修改好并且执行add命令后
- mixed:是reset的默认参数,移动head指针,改变暂存区内容,但不会改变工作区 ;即回到将文件刚刚修改好的时候
- hard:当前head指针、工作区和暂存区内容全部改变 ;即回到指定版本(自己在改指定版本上的修改全部删除)
git checkout
命令:git checkout 文件名
- checkout 文件名:使用暂存区的文件覆盖工作区
所以执行完git add .之后,再执行该命令是无效的 git checkout 和git add是一对反义词;
比如一个文件我写了3行文字并且add到了暂存区,在还没有提交的时候我又追加了2行,此时文件是5行,就在此时我发现我后边追加的2行是错误的,这个时候我就可以使用checkout命令,使用暂存区的文件覆盖工作区的文件
命令:git checkout 分支名
- checkout 分支名:切换分支
git stash
命令:git stash
- stash:将暂时还不想add、commit的修改进行缓存并清空修改的部分。
- stash list:清空了修改的部分,那刚才修改的部分缓存到哪去了?用git stash list命令看看
- stash pop :恢复刚刚缓存的,并清空缓存
git revert
命令:git revert 版本号
- revert:是用于回滚某一个版本(注意:不是回滚到某一个版本),以达到撤销指定版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、
版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert
命令来回滚版本二(通常会有冲突,解决冲突进行提交),生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。
例如:
- 有一个1.txt的文件,目前我们分别commit了两次
- 分别在commit3次
- 此时我们突然发现不应该写 “第2次提交”,但是又想保留3、4、5次提交。这个时候就可以使用revert
这里文件就发生冲突了(不要慌,有冲突我们就解决冲突,这也是revert会带来的问题),文件中也告诉我们revert指定版本所提交的内容。
解决冲突: - 解决完冲突进行add 并 commit
这样就“回滚”某一个版本。
reset是“回滚到”某个版本如果使用reset到第二次提交的版本的话,3、4、5就不会保存了。