1.概要
git总出各种问题,不清楚原因。所以准备了解的跟深入些。本来的理解是这样的:
下载我就pull
修改完就
commit然后push
怎么会有问题的,结果还总有。
既然问题无法避免,那就提高解决问题和恢复问题的能力。如果问题能够恢复就没有什么可担心的。那么恢复问题的方法就那些呢?有如下两种,一种是回退,回退到某一个正确的版本,一种是对某一个错误的版本重新处理。
二 常用的处理流程
1.reset 回退
1.1 基本步骤
1.1.1 git reset --hard
1.1.2 git push -f 因为你push的版本较低,需要强制提交
1.2 回退的基本原理:git reset --hard命令会将HEAD指针、当前分支指针和索引区都移动到指定的commit ID,从而重置工作区为该版本。
1.3 重置的几种类型
1.3.1 --hard 最危险、但也最简单有效
--hard是最直接,最危险,同时也是使用最频繁的选项。当我们传入 --hard 执行 git reset 时,Commit History会被更新到指定的commit,同时暂存索引和工作目录也会被重置到对应commit的状态。这意味着,指定你工作目录和暂存索引里的内容会丢失。
1.3.2 --mixed
--mixed 是默认的选项。这种模式下,引用指针会更新。暂存索引被重置到指定commit的状态,任何暂存索引未提交的变更都会被移动到工作目录中。
1.3.3 --soft
我们传递--soft 选项时,引用指针被更新, 暂存索引和工作目录保持不变。
2. revert 重做某一个版本
2.1 基本步骤如下
2.1.1 git revert -n 版本号
2.2.2 git commit -m 版本名
2.2.3 git push
这个步骤多半是会有问题的,因为如果再去掉这个版本的过程中,往往会有合并,如果有合并的话,这里就需要你处理冲突,没有冲突的情况特别扫,除非这个版本中你做的就是添加或者删除文件的事。
基本上可以把这两种情况教主 revert commit 和revert merge commit ,如果有merge是需要处理冲突的。
2.2 两种不桶的从做方法
git revert --abort 合并后如果有冲突,恢复原状,就像什么都没发生过一样
git revert --quit 和并后,保留处理的结果,如果有冲突,需要手动合并。
3.放弃本次修改
3.1 没有提交的情况
3.1.1 未git add
git checkout – filepathname
git checkout .//全部文件
3.1.2 已经git add
git reset HEAD filepathname
git reset HEAD .
3.1.3 已经 git commit
git reset --hard commitid //任意版本
git reset --hard HEAD^ //上一版
3.1.4 对于本地的项目中修改不做任何理会,就需要用到Git pull的强制覆盖
git fetch --all
git reset --hard origin/master
git pull
4 其他命令
4.1 git status 查看工作区文件的状态
4.2 git-ls-files - 显示有关索引和工作树中文件的信息
-s --stage在输出中显示暂存内容的模式位,对象名称和阶段编号
4.3 git rm --cached 文件名 删除缓冲区的文件
git stash 删除.git 文件中index文件夹中的全部文件
4 参考连接
Git回退版本的几种操作_git回滚到指定版本-CSDN博客
Git恢复之前版本的两种方法reset、revert(图文详解)_git reset 回退以前某个版本_chentiebo的博客-CSDN博客
git如何放弃本地修改操作_git放弃本地修改_北漂燕郊杨哥的博客-CSDN博客
git: 放弃所有本地修改_git放弃本地修改-CSDN博客
Git杂谈—— 万字长文详解git reset - 知乎
https://www.cnblogs.com/ahzxy2018/p/14521922.html