目录
5.版本回退
5.1选项hard&后悔药
5.2后悔药&commit id
5.3版本回退的原理
6.撤销修改
6.1情况一
6.2情况二
6.3情况三
7.删除文件
Git重要能力之一马,版本回退功能。Git是版本控制系统,能够管理文件历史版本。本篇以ReadMe文件为例。
- 版本回退 是回到某一次提交或者回退操作的时候版本 (用提交记录的commit id即可)
- 版本撤销 是直接定位某个文件需要撤销的内容。
5.版本回退
版本回退命令:git reset
版本回退命令本质是:将版本库里面的内容回退的。
git reset也存在多个选项。
git reset 命令语法格式为:
git reset [--soft | --mixed | --hard] [HEAD] 你想要回退到的版本的commit id(提交记录)
- Git reset 只是回退版本库(本地仓库)中的内容。关于工作区和暂存区的内容回退,需要git reset --选项 后面的选项来决定。
- 版本回退是回退一次 add或者commit 操作,不是一个仅仅某个文件的版本。(这次提交的所有文件的版本都不算)
- --soft:只回退版本库中的内容
--mixed:会回退版本库和暂存区的内容(默认选项)
--hard:会回退版本库和暂存区和工作区的内容。(注意❗hard要慎用,一旦使用hard选项,版本库/暂存区/工作区所有的内容都回退到上一个版本。如果文件少,代码少,可以用commit id找回来;如果文件过大,操作频繁,很可能导致丢失一些新开放的代码
git log --pretty=oneline 或者 git log 用来查看 每次提交的记录
git reset 除了以上的版本回退的操作,还可以将文件回退到当前版本HEAD。
HEAD当前版本:意思就是工作区和暂存区的内容版本和版本库中一致。(看选项)
背景☞回退操作:
ReadMe文件原本只有hello linux
ReadMe文件修改之后增加了一行aaaaaaaaaa
git reset [--soft | --mixed | --hard] [HEAD]
git reset --soft //仅工作区的内容
git reset --mixed //是工作区和暂存区的内容——默认选项
git reset --hard //是工作区和暂存区和版本库的内容——慎用
git reset HRAD //(HEAD就是表示回退到当前版本,不需要选项,因为选项是默认选项)
//就是工作区和暂存区的内容一起回到版本库内容一致
git reset HRAD^ //回退到上一个版本
git reset HRAD^^ //回退到上上个版本
//后面都要接commit id或者文件名
5.1选项hard&后悔药
git reset --hard 7f0ea7a49fc354e7f07696609b0c9e8ec261d0b8
用户此刻后悔了,能不能撤销刚刚的操作。
当然可以,刚刚已经答应了最新的commit id,我们知道我们原来版本(回退之前)的commit id,所以还可以回退到原来的文件版本。因为我们可以找到commit id,且并没有将modify的ReadMe的commit id清除掉.
5.2后悔药&commit id
git reflog :用来记录每一次的提交命令。
每一次提交或者是回退操作都有各自操作对应commit id
我们照样也可以使用一部分的commit id来回退
以上的前提是我们能找到commit id,在开发的过程中,我们会进行很多次的git操作,会把commit id冲刷掉,找不到。
5.3版本回退的原理
版本回退的速度是非常快的,版本回退的速度为什么快呢❓
只需要修改的master的指向(指针)
6.撤销修改
git checkout -- 需要撤销的文件名
- 将工作区的文件回到醉经一次的add或者commit时的一个状态
- 注意:必须加上-- 这两根横线,不然就是另外一层含义
背景☞撤销操作
版本12:hello linux aaaaaaaaaaaa
版本3:xxxxx code(需要撤销这行代码)
6.1情况一
情况一:只在工作区的ReadMe文件修改了内容
解决办法:
- 手动撤销——不推荐,容易出错
- git checkout --[filename] --推荐
6.2情况二
情况二:在工作区的ReadMe文件修改了内容并且add到了暂存区。
解决办法:
- 回退命令 git reset HEAD (默认选项--mixed)暂存区回退到当前版本,回到撤销情况一
- 使用git checkout 撤销命令。或者是直接git reset --hard HEAD 一步到位
6.3情况三
情况三:在工作区的ReadMe文件修改了内容并且add到了暂存区和commit提交到了版本库中。
- 前提时:commit 之后没有push
- 撤销的目的是 不影响远程仓库的代码。
- 解释:我们使用操作只能截止到commit操作,而不能使用Push操作。有个这个大的前提,我们的撤销才算有效。含义:将来在公司运行一些代码,是运行的/跑的 远程仓库的代码。(所以我们主要是围绕远程仓库来玩)撤销主要就是撤销我们本地一些错误的,不好的代码。修改完才能推送到远程仓库。
- 远程仓库:暂时不用理解。
- 工作区——add——>暂存区——>commit——>版本库——>Push——>远程仓库
因为上面两种撤销情况我们都不需要考虑,都没有commit到版本库中,不可能到远程仓库。这种情况,版本库中有了,我们不知道,远程仓库里是否被Push了。所以前提条件就是,远程仓库没有被Push,这个撤销操作才算有效。
解决办法:
- 前提条件:commit 之后没有push
- 使用git reset --hard commit id
- 一步一步回到撤销情况二 撤销情况一 再用git checkout
7.删除文件
删除一个已经更新到版本库中的文件(两种做法)
//做法1
rm file
git add file
git commit -m "delete file"
//做法2
git rm file //把工作区和暂存区的文件一步到位删除
git commit -m "delete file"