【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录

5.版本回退

5.1选项hard&后悔药

[5.2后悔药&commit id](#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"
相关推荐
小龙6 小时前
【Git 报错解决】本地无有效提交无法推送(`src refspec main does not match any`)
git·github·报错
小扶苏6 小时前
删除git全局账号信息并设置成新的账号密码命令
git
Greg_Zhong8 小时前
Git创建任务分支进行开发,最后合并主分支master【纯git命令执行过程】阐述
git
眯眼因为很困啦10 小时前
GitHub Fork 协作完整流程
前端·git·前端工程化
AlexDeng12 小时前
Git 中模糊搜索分支名称并创建本地跟踪分支
git
jxm_csdn15 小时前
递归工程工厂:Claude Code + Git Worktrees + Tilix/Tmux 的“AI分身”编码团队
人工智能·git
码咔吧咔15 小时前
Git 中 pull.rebase = true 的作用与设置方法详解
git
郑州光合科技余经理18 小时前
开发实战:海外版同城o2o生活服务平台核心模块设计
开发语言·git·python·架构·uni-app·生活·智慧城市
我是海飞19 小时前
Git 本地仓库推送到远程空仓库指南
大数据·git·elasticsearch
记得开心一点嘛19 小时前
如何去使用git进行协同开发?
git