如何将文件从stage移除

2024-09-07 22:18
文章标签 移除 stage

本文主要是介绍如何将文件从stage移除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:http://oomusou.io/git/git-remove-stage/
git将文件分成三个阶段
- working directory
- stage
- repository

要进入repository之前,必须先进入stage,但实际上可能用了git add之后,才后悔发现这个文件不应该进stage,必须从stage中移除,由于必须考虑该文件是否已经存在于repository,所以必须用不同的git指令才能达成该效果。


version

git 2.6.4


将文件commit进repository

我们知道在git里,要讲文件commit进repository,需要进过两个步骤:
1. 用git add将文件写进stage
2. 用git commit将文件写进repository


将文件从stage中移除

实际应用中经常遇到一种状况:当用了git add后,才发现添加错文件了,必须将文件从stage中移除。
一个看似很单纯的需求,在git下却要分两个不同的状况去思考:
1.若该文件不再repository内:git rm --cached filename
2.若该文件已经在repository内:git reset head filename


git rm - -cached

先了解git rm --cached背后的原理:
1.若文件存在与stage和repository中时,会将文件从repository中删除,并且从stage中删除,但不会删除本地的实际文件,不过由于文件已经从repository中删除,文件会从tracked变成untracked
2.若文件存在与stage,却不存在与repository中,会将文件从stage中删除,但不会删除本地的实际文件。由于repository中本来就没有这个文件,所以该文件一样会是untracked状态。

回想我们的状况:
1.若该文档不存在repository中:git rm --cached会帮我们从stage删除,且文件本来就是Untracked,执行完还是Untracked,符合预期。
2.若文件已存在repository中:git rm --cached会帮我们从repository中删除,并且从stage中删除,因为已经从repository中删除了文件,文件会从tracked变成untracked,这并不符合我们的预期。

这说明了为什么文件在repository时,我们一定不能用git rm --cached


git reset head

先了解git reset head背后的原理:
head为目前最新的commit节点,git reset head表示将文件还原到目前最新的commit。以下为支持的参数,若没有任何参数,默认为--mixed
1.--soft:repository的文件会被还原到head,但stage与working directory文件不变。
2.--mixed:repository与stage的文件都会被还原到head,但working directory的文件不变。
3.--hard:repository、stage和working directory的文件都会被还原到head。

回想我们的状况:
1.若文件不在repository中:git reset head会出现以下错误:

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

因为文件根本还没进repository,也就是还没有commit过,哪来的head呢?git马上给你错误信息,这并不是我们预期的。
2.若文件已经在repository中:git reset head会帮我们将repository与stage还原到目前最新commit节点文件,但working directory的文件不会被还原,因为stage的文件已经不是目前的文件,所以文件的状态由原本的stage变成modifed,符合我们的预期。
这解释了为什么文件不存在于repository时,不能用git rm --cached而得用git reset head

这篇关于如何将文件从stage移除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146315

相关文章

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境?

【佳学基因检测】网站加密证书失效后,如何移除并为新的证书安装准备环境? 当WoTrus DV Server CA证书失效后,你需要确保你的Nginx配置中不再引用该证书,并且移除或替换相关的证书文件。以下是具体步骤: 1. 确认Nginx配置文件 首先,检查Nginx的配置文件,确保它不再引用旧的WoTrus证书。如果你已经使用Certbot安装了Let’s Encrypt证书,Certbo

数据结构:(LeetCode203)移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5] 示例 2: 输入:head = [], val = 1输出:[] 示例 3: 输入:head = [7,7,7,7], va

代码随想录算法训练营Day03 | 链表理论基础、203.移除链表元素 、707.设计链表、206.反转链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 链表理论基础203.移除链表元素思路与重点 707.设计链表思路与重点 206.反转链表思路与重点 链表理论基础 C/C++的定义链表节点方式: // 单链表struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指

Stage 模型应用程序包的结构

AppScope 目录是工具自动生成的 Module 则是工具自动生成的 entry、library,也可以自定义。 Module 类型 Module 有两种类型: Ability 类型的 Module:用来实现应用功能和特性,每一个 Ability 类型的 Module 编译以后。生成一个 hap 后缀的文件,也就是 HAP 包,可以独立安装和运行,是应用安装的基本单元。Library类型

【Get深一度】Win10 Setup will now quit. 系统管理员失去安装和移除软件的权利(求助帖)

1.问题详述 笔者在安装软件的时候无意在任务管理器中叉掉了一个进程,然后 ,悲剧了。。莫名其妙就失去了权限。  2.以安装mathtype为例 没到最后都会弹出一个Setup :  问题手打一遍:You do not appear to have the rights required to install or remove s

【网易笔试】移除重复元素

/************************************************************** 小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。  输入描述: 输入包括两行:第一行为序列长度n(1 ≤ n ≤ 50)第二行为n个数sequence[i](1 ≤ sequenc

5、Django Admin后台移除“删除所选”操作

默认情况下,Django Admin后台的listview模型列表页,会有一个Delete Selected删除所选操作。假设你需要再从Hero管理模型中移除该删除操作。 ModelAdmin.get_actions方法可以返回所有的操作方法。通过覆盖此方法,移除其中delete_selected方法,便可可以从下拉列表中删除它。将HeroAdmin管理模型的代码修改如下: def get_a

算法-----数组-----移除特定元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不

leetcode 27: 移除元素

int removeElement(vector<int>& nums, int val) {int n=nums.size();if(n==0)return 0;for(int i=0;i<n-1;){if(nums[i]==val){for(int j=i+1;j<n;j++)nums[j-1]=nums[j];n--;}if(nums[i]!=val)i++;}if(nums[nums.

babel-preset-stage-2

http://www.cnblogs.com/chris-oil/p/5717544.html