【原创】Git删除暂存区或版本库中的文件

0 基础

    我们知道Git有三大区工作区、暂存区、版本库)以及几个状态untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的其他有关Git的文章【链接】 
  (1)打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。
  (2)首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。
    简单的认识了Git的工作流程,接下来便可以看看如何删除错误添加到暂存区或版本库里的文件了!

1 删除错误添加到暂存区的文件

    有时你在工作区新建了文件TestFile,并且已经将它添加到了暂存区,git会告知,现有有一个文件未提交到版本库,如下图:
 

 

 

1.1 仅仅删除暂存区里的文件    

    此时你想撤销错误添加到暂存区里的文件,可以输入以下命令:
  1. git rm --cache 文件名

     

    
    上面的命令仅仅删除暂存区的文件而已,不会影响工作区的文件,如上图,TestFile.txt仍然存在,此时输入下面命令,git会告知有一个未跟踪的文件TestFile.txt。
  1. git status

     

 

1.2 删除暂存区和工作区的文件

  1. git rm -f 文件名

     

    工作区的文件也被删除了。
    
 

 

2 删除错误提交的commit

    有时,不仅添加到了暂存区,而且commit到了版本库,这个时候就不能使用git rm了,需要使用git reset命令。
    错误提交到了版本库,此时无论工作区、暂存区,还是版本库,这三者的内容都是一样的,所以在这种情况下,只是删除了工作区和暂存区的文件,下一次用该版本库回滚那个误添加的文件还会重新生成。
    这个时候,我们必须撤销版本库的修改才能解决问题!
    git reset有三个选项,--hard、--mixed、--soft。
//仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --soft 版本库ID

 

//仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID

 

//彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --hard 版本库ID
    那我们到底应该用哪个选项好呢?
    (1)如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。如下图:
    (2)如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset --hard 版本库ID。
    (3)为什么不使用--soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件,详细见上文。

转载于:https://www.cnblogs.com/cposture/p/git.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux软件依赖库,【Linux】ubuntu系统安装及软件依赖库

系统:安装Ubuntu 16.04.1 LTS 更新到Ubuntu 16.04.3 LTS搜狗中文输入法然后安装搜狗输入法for Linux,直接下载deb包,双击->ubuntu software-center闪退,通过升级系统以及重装center解决:sudo apt-get updatesudo apt-get dist-…

JMS

JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体…

reStructuredText(.rst)语法规则快速入门

原文:http://blog.useasp.net/archive/2014/09/05/rst-file-restructuredtext-markup-syntax-quikstart.aspx?utm_sourcetuicool 简介 reStructuredText是一种轻量级的文本标记语言,直译为:重构建的文本,是Python中Docutils项目的…

精读linux源码,Linux基础入门的操作精读.doc

摘要:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想&#xf…

安卓App设计博文

安卓1080P界面设计规范解读 http://www.25xt.com/appdesign/9487.html APP设计尺寸解读:px、pt、ppi、dpi、dp、sp之间的关系 http://www.25xt.com/appdesign/9294.html 安卓界面设计规范 http://www.25xt.com/android转载于:https://www.cnblogs.com/tmlee/p/4894…

Android学习四、Android中的Adapter

一、Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set. 一个Adapter是…

linux select shell,linux之shell编程select和case用法

shell里的select用法:语法:#i/bin/bashselect 变量 in 列表do要执行的语句done举例:#!/bin/bashecho "What is your favourite OS?"select var in "windows" "Linux" "Gnu Hurd" "Free BSD&qu…

elasticsearch 查询(match和term)

elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。 由于DSL查询更为直观也更为简易,所以大都使…

Andorid获取状态栏高度

在应用开发中,有时我们需要用代码计算布局的高度,可能需要减去状态栏(status bar)的高度。状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的,例如像通常使用系统资源那样android.R.dimen.status_bar_heig…

linux 域名劫持,域名被劫持处理方案

首先简单说下什么是域名劫持,域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或…

在linux下修改oracle的sys和system的密码和用户解锁

修改oracle的sys和system的密码和用户解锁 1、再linux系统上sqlplus /as sysdba进入sqlplus后就可以修改sys和system的密码了2、alter user sys identified by "密码"alter user system identified by "密码"其实就是先登录到oracle然后,在里面…

background 与backgroundcolor区别

background 可以设置 背景颜色、背景图片、定位等 background-color 只能设置 背景颜色 转载于:https://www.cnblogs.com/sun9218333949/p/4265863.html

linux 检测蓝牙 rssi,树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)...

若该文为原创文章,转载请注明原文出处长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808下一篇:敬请期待…接下来介绍树莓派蓝牙模块的开发,使用的协议为bluez。客户端bob,服务器al…

Android Studio项目整合PullToRefresh的问题记录

PullToRefresh下拉刷新在App中应用非常频繁,然而PullToRefresh是在ADT下开发完成的。如果要将其整合到Android Studio目录下的话颇费周折。前面的文章“Android Studio项目引入外部库注意事项(PullToRefresh)”介绍了如何将PullToRefresh的library引入到项目中。如果…

POJ 1852 Ants 分析

1、暴搜 每只蚂蚁朝向有两种&#xff0c;可以枚举n只蚂蚁的朝向&#xff0c;然后模拟蚂蚁相遇的情景&#xff0c;总共2^n中情况。 2、分析ants相碰的情况: (a->) (<-b) 变成 (<-a)(b->) 由于每只蚂蚁是相同的&#xff0c;所以等价与(<-b)(a->)&#xff0c;…

第 三 十 八 天:Linux 的 LVM 逻 辑 卷 管 理

小Q&#xff1a;书籍是全世界的营养品。生活里没有书籍&#xff0c;就好像没有阳光&#xff1b;智慧里没有书籍&#xff0c;就好像鸟儿没有翅膀。 —— 莎士比亚简介LVM&#xff1a;Logical Volume Manager&#xff08;逻辑卷管理&#xff09;&#xff…

发福利喽稀疏FFT

附介绍&#xff1a;四位来自麻省理工学院的研究人员蒂娜卡塔比&#xff08;Dina Katabi&#xff09;、海塞姆哈桑&#xff08;Haitham Hassanieh&#xff09;、比欧特因迪克&#xff08;Piotr Indyk&#xff09;和埃里克普里斯&#xff08;Eric Price&#xff09;今年1月&#…

linux 多个秘钥,linux管理多个ssh公钥密钥

很多网上免ssh密码使用git的命令都没有考虑到多个公钥密钥的情况&#xff0c;这里搜集并整理一下管理多个ssh公钥密钥的步骤。首先生成公钥和密钥&#xff0c;默认情况公钥的文件名比密钥末尾多.pubssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "Key for Work stuff"…

OpenFire源码学习之二十一:openfie对用户的优化(上)

用户类 优化用户主要是要解决用户的连接量。已经对用户的访问速度和吞吐量。 预初始化 在前面的带面中提出来了用户的预初始化。这里就不在贴出来了。下面将redis用户库连接池处理贴出来UserJedisPoolManager public class UserJedisPoolManager extends BasicModule{private s…

Camera Calibration 相机标定:原理简介(三)

3 绝对圆锥曲线 在进一步了解相机标定前&#xff0c;有必要了解绝对圆锥曲线&#xff08;Absolute Conic&#xff09;这一概念。 对于一个3D空间的点x&#xff0c;其投影空间的坐标为&#xff1a;x~[x1,x2,x3,x4]T。我们定义无穷远处的平面用符号Π∞表示&#xff0c;该平面内的…