zoukankan      html  css  js  c++  java
  • git命令——git rm、git mv

    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")
    View Code

    然后再运行 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
    View Code

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

    现在假设这样一组场景,有文件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)
    View Code

    必须要用强制删除选项 -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        
    View Code

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

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

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

     

     

  • 相关阅读:
    各种alloc傻傻分不清楚
    嵌入式开发一般流程
    谈谈看门狗在嵌入式中的用法
    基于开发板的二次嵌入式开发
    谈一谈接口电路
    学习ucos和ARM体系结构的路线图
    寻找链表的中位节点(利用快慢指针)
    水箱容积问题
    盛水最多的容器
    数据结构与算法分析C语言描述第二版第79页
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9949426.html
Copyright © 2011-2022 走看看