Git忽略文件(.ignore)以及git status,git diff,git rm命令

Posted haoocker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git忽略文件(.ignore)以及git status,git diff,git rm命令相关的知识,希望对你有一定的参考价值。

git相关的其他命令

在之前的两篇文章中简单介绍了与git相关的基础知识,如果想要熟练和快速运用git,还需要熟悉git的其他相关的命令。这一篇文章就是关于git的一些常用的“其它命令”


忽略文件

如果有不想要某些文件被纳入git的管理,可以在git中忽略掉这些文件。这时,我们需要创建一个名为.gitignore的文件,在这个文件中写入想要忽略的文件或文件类型。下面列出文件.gitignore的格式规范:

  • 所有空行或者以#开头的行都会被Git忽略,相当于是注释
  • 可以使用shell所使用的简化了的正则表达式
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

我们可以进行一个例子进行具体的展示,首先在之前的目录的基础上添加Text4.txt和Text5.txt以及Pictures和Videos文件夹,同时添加一个.gitignore文件

技术图片

同时在Pictures文件夹中添加test文件夹和Test6.docx和Text7.txt。test文件夹中含有Test7.docx

技术图片

这时可以查看状态,可以看见:

技术图片

所有新添加的文件都处于untracked的状态,这时在.gitignore文件中添加如下:

# ignore all files in the Videos/ directory
# 忽视所有Videos文件夹中的文件
Videos/

# ignore .txt files(Regular Express)
# 忽视当前目录下txt文件(正则表达式)
*.txt 

#ignore all txt files in Pictures directory,but not in Pictures/test directory
#忽视所有在Pictures目录下的以txt为后缀的文件,但是不忽略Pictures/test下的
Pictures/*.txt

# ignore all docx files in Pictures directory,including Pictures/test
#忽视包含Pictures/test和Pictures/目录下的所有以docx为后缀的文件
Pictures/**/*.docx

这时再查看当前文件的状态,会发现所有被配置的文件都已经被忽略了。

技术图片

注意:这里的文件都是处于未跟踪状态的文件,如果某个文件在暂存区或者仓库区则在.gitignore文件中配置忽略无效
如果要忽略指定模式以外的文件或目录,需要使用"!",在gitignore文件中添加以下内容:

#track Test4.txt,even though you're ignoring .txt files above
#这里忽视了除Test4.txt文件以外txt文件,即使在上面定义了忽视.txt文件 
!Test4.txt

还有一个需要注意的是如果当前目录的子目录中有同名的文件(包含后缀名)在此文件夹中写文件名,这时会递归地将子目录中的同名文件给忽视,如果不想忽视子目录中的文件则需要加上"/"。在当前目录中和Files目录下分别添加Test6.md后,在.gitignore文件中添加如下内容:

#Only ignore Test6.md in the current directory,not subdir/Test6.md
#只是忽略当前目录下的Test6.md而不是子目录中Test6.md
/Test6.md

技术图片

GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它.

状态简览

通常git status命令的输出很详细,如果想要得到更加简单的形式的输出,则需要使用命令git status -s
在当前文件夹中将Test4.txt和.gitignore文件使用git add添加到暂存区中,然后再在Test4.txt中添加内容,同时再向已经处于仓库区中的Test1.md添加新内容,使用git status -s可以看到:

技术图片

这时如果再使用git add将Test1.md和Test4.txt添加到暂存区,则显示:

技术图片

可以看出M的位置出现在了两处,总结一下,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左 边的 M 表示该文件被修改了并放入了暂存区,新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记。

详细查看修改的内容

使用git status可以查看到文件变化的地方,但是过于模糊,如果想要知道具体修改了什么地方,可以使用git diff的命令

  1. 查看已暂存和未暂存的修改,首先将所有文件添加到暂存区。

技术图片

这个时候运行git diff命令可以看见没有任何输出,因为所有文件已暂存。
当在Test1.md文件新添加一行后,再使用git diff的命令:

技术图片

因此要明白git diff比较的是已暂存和未暂存文件之间的区别。

  1. 查看已暂存的将要添加到下次提交里的内容,依然是将所有文件添加到暂存区

技术图片

这时运行git diff --cached或者git diff --staged命令,会出现所有你已暂存起来的修改

技术图片

因此git diff --cached或者git diff --staged命令便是查看已暂存的将要添加到下次提交里的内容

提交更新---将提交信息与命令放在同一行

可以在git commit命令之后添加 -m选项,这样就可以将提交信息与命令放在同一行了.

技术图片

可以所有更新的信息都会输出

跳过使用暂存区域

每次提交之前都要使用git add将文件提交到暂存区,这样略显繁琐,如果提交已经被git跟踪过的文件,可以跳过将此文件添加到暂存区的步骤,如下提修改已经在仓库区的Test4.txt,使用git commit -a命令可以直接提交Test4.txt到仓库区。

技术图片

移除文件

如果当要简单删除目录中的文件时,可以手工在文件夹中删除,也可以运行rm命令,比如:

rm Files/Test6.md

其状态为:

技术图片

此时可以看出这次的删除操作并没有记录到git中,因此可以运行git rm命令

技术图片

技术图片

下次提交时候这个文件便不会再纳入git的版本管理之中了。

如果一个文件已经存在于仓库中,这时运行git rm会在文件中直接删除该文件并不会被纳入git的管理中

但是如果一个文件在暂存区中,想要删除则需要用强制删除选项-f。不适用会报错(这也是一种安全特性)比如下面的例子,Test4.txt已经在暂存区中
技术图片

如果使用git rm -f则会强制删除文件,如果使用git rm --cached则会在目录中保留此文件,但是并不会让git继续跟踪。

移动文件和重命名文件

如果要移动文件则直接使用rm命令,但是如果使用了git mv则结果会很不一样,运行git mv readme.md readme相当于运行了三条命令:

mv readme.md readme
git rm readme.md
git add readme

比如下面的例子:运行git mv Test4.txt Test7.md结果状态为:

技术图片

因此,git rm命令将文件或文件夹重命名的文件,上面的例子就是将Test4.txt改名成了Test7.md

以上是关于Git忽略文件(.ignore)以及git status,git diff,git rm命令的主要内容,如果未能解决你的问题,请参考以下文章

Git 学习笔记 ignore 忽略文件

Git 学习笔记 ignore 忽略文件

IDEA提交Git时忽略文件ignore文件备份

git ignore 添加忽略文件不生效解决办法

git 预备工作:配置忽略文件的操作步骤

git ignore文件