git rm

git rm命令官方解释

删除的本质

在git中删除一个文件,本质上是从tracked files中移除对这些文件的跟踪。更具体地说,就是将这些文件从staging area移除。然后commit。

作用

git rm的作用就是将文件从暂存区删除

git rm的作用就是将文件从工作目录 和 暂存区 删除。

git rm并不能仅仅删除工作目录中的文件,而暂存区保持不变。目前git也没有提供任何参数支持这一功能。要想实现这一目标,只能使用Linux自带的/bin/rm命令

使用场景

彻底删除文件

所谓彻底删除文件,就是在工作目录和暂存区删除文件。由于gir rm不能直接删除工作目录中的文件,于是使用/bin/rm手动删除。此时执行git status 时就会在 “Changes not staged for commit”部分看到,表示没有被更改没有被暂存

$ rm PROJECTS.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in workingdirectory)
deleted: PROJECTS.md
no changes added to commit (use "git add" and/or "git commit -a")

然后再运行 git rm 将文件从暂存区移除

$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: PROJECTS.md

下一次提交时,该文件就不再纳入版本管理了。

现在假设这样一组场景,有文件file1.c,file2.c,file3.c。我把file1.c做了修改,并且git add到暂存区。这时候如果向上面那样手动/bin/rm删除file1.c,然后再git rm file1.c,这样没有任何问题。但是如果你跳过/bin/rm file1.c这一步,直接git rm file1.c是不被允许的,报错

$ git rm file1.c
error: the following file has changes staged in the index:
file1.c
(use --cached to keep the file, or -f to force removal)

必须要用强制删除选项 -f(即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。

只删除暂存区的文件

如果你想保留工作目录中的文件,但是删除对应暂存区中的文件。换句话说,你想让这些保存在磁盘上的文件不再被git跟踪。请使用--cached 选项。为啥会有这种奇怪的需求呢?假设这样一种场景,你忘记了添加.gitignore文件,不小心把很多本应忽略的文件加到了暂存区,这时候就需要这里介绍的做法了。

$ git rm --cached README

git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:

$ git rm log/\*.log

注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。

此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:

$ git rm \*~

该命令为删除以 ~ 结尾的所有文件。

git mv

不像其它的 VCS 系统,Git 并不显式跟踪文件移动操作。 如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。 不过 Git 非常聪明,它会推断出究竟发生了什么。

你依然可以使用$ git mv file_from file_to 对文件改名。它会恰如预期般正常工作。 实际上,即便此时查看状态信息,也会明白无误地看到关于重命名操作的说明:

$ git mv README.md README
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README

事实上,运行 git mv 就相当于运行了下面三条命令:

$ mv README.md README
$ git rm README.md
$ git add README

如此分开操作,Git 也会意识到这是一次改名,所以不管何种方式结果都一样。 两者唯一的区别是,mv 是一条命令而另一种方式需要三条命令,直接用 git mv 轻便得多。 不过有时候用其他工具批处理改名的话,要记得在提交前删除老的文件名,再添加新的文件名。

git命令——git rm、git mv的更多相关文章

  1. 每日一条 git 命令行:git clone https://xxxxx.git -b 12.0 --depth 1

    每日一条 git 命令行:git clone https://xxxxx.git -b 12.0 --depth 1 -b 12.0:分支 12.0 --depth 1:depth 克隆深度,1 为最 ...

  2. git 命令 git status add rm commit mv

    1.查看 git 仓库文件改动状态 Git 仓库内文件改动有 4 种状态,除了 Unmodified 状态的文件因为并未改动默认没有状态不做显示之外,其他文件改动状态都可以通过 git status ...

  3. git 命令参考手册 git中文命令参考手册大全

    git init # 初始化本地git仓库(创建新仓库)git config --global user.name "xxx" # 配置用户名git config --global ...

  4. 常用git命令总结 初始化git库操作 git 子模块

    查看 git status 查看状态 Gitk 界面各个版本查看 添加 Git add filename 添加指定文件 Git add . 操作未暂存的文件 Git add -A 操作所有文件 包括删 ...

  5. webstorm和git安装后,terminal输入git命令,提示'git' 不是内部或外部命令

    最近换了工作,拿到电脑重新搭建编程环境,踩了好多git和sourcetree的坑,就是一直拉不下来代码,晕·~~经过几天的爬坑,终于可以拉取推送代码了!!! 问题:webstorm和git都安装完成, ...

  6. Git命令之:git push

    保护版权:转自,http://www.yiibai.com/git/git_push.html

  7. git 命令整理

    记录一些git 命令,以便自己以后查阅 基本命令   1.git add (保存工作区的变动到暂存区) git add . 和git add -A把整个工作区添加到暂存区 2.git commit ( ...

  8. Git命令详解(一)-个人使用

    本文暂时不会涉及到团队如何使用Git的内容,而是从个人的角度探讨如何用好Git. 约定 绿色的5位字符表示提交的ID,文中用<commit>表示,分别指向父节点.分支用橘色显示,分别指向特 ...

  9. GIT命令一页纸

    ,配置用户名和邮箱 $ git config --global user.name "Your Name" $ git config --global user.email &qu ...

  10. Git知识总览(二) git常用命令概览

    上篇博客我们从 git clone 和 git status 两个命令开始,引出了一系列的git操作命令, 请参见:<Git知识总览(一) 从 git clone 和 git status 谈起 ...

随机推荐

  1. AD 常用策略-修改本地管理员密码,禁用非administrator帐户,删除非administrator帐户

    这个是用启动脚本实现的. 我放在计算机策略下了. 另存为VBS格式即可 修改第三行“123qwe!@#”,引号中的就是你的新密码. 一:禁用非administrator帐户 strComputer = ...

  2. PngOptimizer PNG压缩工具

    好用,非常好用,速度快. 把图片拖入即可,同文件夹备份替换压缩. 点击下载

  3. WebException 请求被中止: 操作超时

    HTTP 请求时出现 :WebException 请求被中止: 操作超时 处理HTTP请求的服务器 CPU 100% ,重启后正常.

  4. MySQL 过滤复制+复制映射 配置方法

    场景 node1 和 node2 为两台不同业务的MySQL服务器.业务方有个需求,需要将node1上的 employees库的departments .dept_manager 这2张表同步到 no ...

  5. qbittorrent搜索在线插件

    https://raw.githubusercontent.com/khensolomon/leyts/master/yts.py https://raw.githubusercontent.com/ ...

  6. python字符串/列表/元组/字典之间的相互转换(5)

    一.字符串str与列表list 1.字符串转列表 字符串转为列表list,可以使用str.split()方法,split方法是在字符串中对指定字符进行切片,并返回一个列表,示例代码如下: # !usr ...

  7. rsync同步本地和服务器之间的文件

    同步本地文件到服务器 rsync -zvrtopg --progress --delete test -e 'ssh -p 6665' yueyao@172.16.0.99:/media/sdb/us ...

  8. Properties类使用详解

    Java Properties类使用详解   概述 Properties 继承于 Hashtable.表示一个持久的属性集,属性列表以key-value的形式存在,key和value都是字符串. Pr ...

  9. BJFU-207-基于顺序存储结构的图书信息表的逆序存储

    #include<stdio.h> #include<stdlib.h> #define MAX 1000 typedef struct{ double no; char na ...

  10. 20191106-基于Python的对字母基数排序

    基数排序 概念 基数排序的算法过程是先将待排元素补位,使其长度一致,然后按照序列中的元素的每个位数进行分桶的一种算法. 比如待排序列是数字,则将所有待比较数值(正整数)统一为同样的数位长度,数位较短的 ...