热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gitrm工作区文件删除后撤销

文章目录1.现象描述2.解决3.add了多余的文件需要从add中删除4.commit中撤销文件4.1查看commit的内容4.2撤销commit里的一部分内容1.现象描述今天ad

文章目录

  • 1. 现象描述
  • 2. 解决
  • 3. add了多余的文件需要从add中删除
  • 4. commit中撤销文件
    • 4.1 查看commit的内容
    • 4.2 撤销commit里的一部分内容


1. 现象描述

今天add文件的时候,不小心把一个不需要提交的也给加上了,但是删除的时候错误使用了git rm命令,导致工作区文件被删除。

// 误删除
$ git rm XXX/CMakeLists.txt
> rm 'XXX/CMakeLists.txt'//查看当前状态
$ git status
> Changes to be committed:(use "git restore --staged ..." to unstage)deleted: XXXX/CMakeLists.txt

2. 解决

感谢How to recover file after git rm abc.c?,只需要

$ git reset -- XXXX/CMakeLists.txt
> Unstaged changes after reset:
D XXX/CMakeLists.txt
# 其实在上面的 git status中,已经提示使用 "git restore --staged ..." to unstage
# 所以这里除了使用reset,也可以使用restore$ git checkout -- XXXX/CMakeLists.txt

然后就可以看到rm的文件已经回来了

参考:

  • git 删除文件后如何恢复

3. add了多余的文件需要从add中删除

其实之前已经总结过这个问题了,在这里的1. git add相关部分中。

这里再写一遍,加深印象。根据 Stack Overflower:How do I undo ‘git add’ before commit?中的内容,其实只需要

# 撤销add中的某个文件
git reset <file># 撤销add中的所有内容
git reset

  • 在老版本的git中&#xff0c;上述命令其实等价于git reset HEAD git reset HEAD
  • 如果HEAD没有定义&#xff08;即到目前为止你的repo还没有进行过任何提交&#xff09;或者对HEAD有歧义&#xff08;比如你创建了一个叫HEAD的分支&#xff0c;这是个很蠢的事情&#xff0c;不能这么干&#xff09;。
  • 不过从Git1.8.2开始就变了&#xff0c;所以在比较新的git版本中&#xff0c;就可以不带HEAD的去使用这个命令了


原版回答的截图
在这里插入图片描述

参考&#xff1a;

  • git如何撤销

4. commit中撤销文件

如果不幸&#xff0c;add的时候没注意&#xff0c;commit的时候才看到具体的信息&#xff0c;也可以救

4.1 查看commit的内容

# 查看 git log找到要查看的commit的 hashID
$ git log
commit e914375df (HEAD -> yourbranch)
Author: yourname<youremail&#64;XXX.com>
Date: Thu Jul 14 10:28:02 2022 &#43;0800add try catchcommit 73a20f94c5ed5 (origin/yourbranch)
Author: yourname<youremail&#64;XXX.com>
Date: Thu Jul 14 09:28:30 2022 &#43;0800export one header file# 使用commit_hashID来show
$ git show e914375df
# 然后就会显示很多详细信息&#xff0c;可以不断回车看&#xff0c;想退出的话&#xff0c;按 q

参考&#xff1a;

  • Git 查看某次commit的内容
  • How can I see the changes in a Git commit?

4.2 撤销commit里的一部分内容

以下内容均来自&#xff1a;stack overflow——Remove files from Git commit
老的操作&#xff08;也是目前网上搜到比较多的操作&#xff09;

# 查看一下自己需要回退到哪个commit版本
$ git reflog
edffvva4 (HEAD -> 0.2) HEAD&#64;{0}: commit: XXX
evsvefbf (origin/0.2) HEAD&#64;{1}: commit: XXX
9veevvf9 HEAD&#64;{2}: pull: Fast-forward
cbgrbee8 HEAD&#64;{3}: pull: Fast-forward
3r35t4d4 HEAD&#64;{4}: commit: XXXX
4t5ggbd0 HEAD&#64;{5}: commit: XXXX
g5g35g3r HEAD&#64;{6}: commit: XXXX
# 除了有commit的hashID&#xff0c;还有一些HEAD&#64;{数字序号}# 可以选择回退到上一个commit&#xff08;即这次包含失误添加的内容的commit的上一次commit&#xff09;
$ git reset --soft HEAD^
# 或者也可以使用
git reset --soft HEAD~1
# git reset --soft ${id}&#xff0c;回退到id版本# 然后把不想要的文件从commit里移出去
git reset HEAD path/to/unwanted_file

Git 2.23.0之后的新操作&#xff0c;可以直接使用restore命令列出不想要的文件

# 可以先看一下自己的git版本是不是足够新
$ git version
git version 2.37.0.windows.1# 列出不想在commit的内容
git restore --staged path/to/unwanted_file
# 继续提交&#xff0c;甚至还可以复用本次commit的message信息
git commit -c ORIG_HEAD

注意

  • 使用git restore那两句命令后&#xff0c;再去push&#xff0c;没有生效&#xff0c;想要剔除不commit的内容还是在。
  • TBD

参考&#xff1a;

  • stackoverflow&#xff1a;Remove files from Git commit
  • How To Remove Files From Git Commit
  • git如何撤销

推荐阅读
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
author-avatar
yuanguo374
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有