git rm

git rm可以执行删除的条件(前提是要被删除的文件还没有从workspace tree中移除)

    git rm可以执行删除的条件:被删除文件在index当中的blob内容必须与HEAD commit指向的blob内容以及workspace tree中的文件内容一致,换句话说即当运行git status时,被删除的文件不能出现在git status的输出当中。

    git rm --cached可以执行删除的条件:被删除的文件在index当中的blob内容与HEAD commit指向的blob内容一致,或者index当中的blob内容与workspace tree中的文件内容一致,换句话说即当运行git status时,被删除的文件不能同时出现在Changes to be committed和Changed but not updated当中。

从index当中删除已经不再worksapce tree当中的文件

    如果没有使用git rm删除,而是直接使用rm删除文件,那么,该文件只是从workspace tree当中被删除了,而没有从index当中删除,这时的解决办法有5个:

1) 执行git rm --cached 或者git rm命令;

2) 执行git commit -a命令;

3)执行git add -u;

4)执行git add -A命令;

5)执行git commit -m msg;

git glob的扩展

    glob在git中有两种扩展方式,一种是使用shell的扩展方式,另一种是git自己扩展,比如有下面的文件结构

                            d

                             |

              -----------------------

             |                               |

            hello.txt                     dd

                                             |

                                          hello.txt

    此时git rm d/*.txt只会删除d/hello.txt,而不会同时删除d/dd/hello.txt,因为此时glob进行的是shell扩展,而shell 扩展不会匹配/;如果使用git rm d/*.txt,则会同时删除d/hello.txt, d/dd/hello.txt,由于在*前面加入了字符,此时进行的是git扩展,git扩展可以匹配/。

但是这里有一个疑问就是如果使用git rm *.txt或者git rm d*.txt,即使在*前面没有加入,d/hello.txt和d/dd/hello.txt都会被删除

原文地址:https://www.cnblogs.com/chaoguo1234/p/5318222.html