首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Git版本控制器】第三弹——版本回退,撤销修改,删除文件

【Git版本控制器】第三弹——版本回退,撤销修改,删除文件

作者头像
用户11396661
发布2025-02-18 12:35:38
发布2025-02-18 12:35:38
72600
代码可运行
举报
文章被收录于专栏:C++开发C++开发
运行总次数:0
代码可运行

1.版本回退:

1.1背景

当我们想回退到某个特定的版本的时候,我们就可以进行版本回退。

回退指的是版本库里面的版本。缓存区,工作区里面的内容由命令决定。

1.2git reset命令

命令基本格式: git reset [--soft | --mixed | --hard] [HEAD]

代码语言:javascript
代码运行次数:0
运行
复制
git reset [--soft | --mixed | --hard] [HEAD]
选项

--soft

重置版本库

保留工作区,缓存区更改

--mixed(不带参数时的默认选项)

重置版本库,缓存区

保留工作区更改

--hard(慎用)

重置版本库,缓存区,工作区

全部被重置

这三个选项三选一,如果不带参数,默认就是--mixed。

[HEAD]

🥮1.写法一:

可直接写成 commit id,表示指定退回的版本。

🥮2.写法2:

HEAD 表⽰当前版本 HEAD^ 上⼀个版本 HEAD^^ 上上⼀个版本

🥮2.写法3:

HEAD~0 表⽰当前版本 HEAD~1 上⼀个版本 HEAD~2 上上⼀个版本

为什么--hard选项要慎用?

因为如果我们在工作区进行了编写代码,如果直接用--hard,那么工作区没有进入版本库里面的代码就消失了,再也找不到了。

1.3注意事项:

我们可以用git log查看commit id,然后根据commit id就可以回退到指定的版本。然后我们再用,发现log也变化了,之前的commit id不见了。那么如果我们又想退回了。那么我们也不知道那个版本的commit id了呀。

用HRAD^也是回退到当前master分支下的前一个版本。

这时候就要用git reflog 查看每次的回退的信息了。

代码语言:javascript
代码运行次数:0
运行
复制
git reflog

最前面的这些也可以作为HEAD直接进行版本回退。

输入哪个就回退到哪个版本。


2.为什么版本库退回很快?

2.1原因:

因为版本回退,每一次的更新,修改,都是HEAD指针在变,HEAD指向的是master,master里面放的是最新一次的commit id。

所以回退HEAD指向之前的commit id值。

2.2commit id用单向链表进行管理

我们发现,每次提交,HEAD指向新的commit id,然后每一个commit id文件里面保存着上一个commit id。(parent


3.撤销修改

3.1只在工作区进行了修改,还没有add操作

执行下面命令,记住--是两个杠,不能写错,写错就是另外的意思了。

代码语言:javascript
代码运行次数:0
运行
复制
git checkout -- [file]

这个场景就适用于,我们之前已经之前的代码都已经add,commit操作了。然后我们再在工作区进行开发,后面我们想撤销到最新一次的commit的内容。就使用上面的命令。

3.2在工作区修改,并且进行add操作,没有进行commit操作

方法一:

直接进行hard操作,回退到当前版本库的内容。

代码语言:javascript
代码运行次数:0
运行
复制
git reset --hard HEAD [filename]
方法二:

进行--mixed操作,再进行git checkout -- 操作

代码语言:javascript
代码运行次数:0
运行
复制
git reset --hard HEAD [filename]
git checkout -- [filename]

3.3进行了commit操作,但是没有进行push到远程仓库

前提条件,没有进行push操作,提交到远程仓库

代码语言:javascript
代码运行次数:0
运行
复制
git reset --hard HEAD^

4.删除文件

对工作区进行删除,新增,修改,都是对工作区进行变动,都可以进行git add,gitcommit 操作。

要删除一个文件,我们可以现在工作区进行删除,然后再进行add,commit操作,就把版本库里面的指定文件也删除了。

还有一个就是git提供的删除文件的操作。

git rm [filename]

代码语言:javascript
代码运行次数:0
运行
复制
git rm [filename]

这个命令会直接把工作区和暂存区的这个文件都删除。

然后再进行commit操作就可以了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.版本回退:
    • 1.1背景
    • 1.2git reset命令
      • 选项
      • [HEAD]
    • 1.3注意事项:
  • 2.为什么版本库退回很快?
    • 2.1原因:
    • 2.2commit id用单向链表进行管理
  • 3.撤销修改
    • 3.1只在工作区进行了修改,还没有add操作
    • 3.2在工作区修改,并且进行add操作,没有进行commit操作
      • 方法一:
      • 方法二:
    • 3.3进行了commit操作,但是没有进行push到远程仓库
  • 4.删除文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档