当进入装有git的目录里,创建一文件,如
$touch test.txt
这时候,运行git status,就会发现这个文件出现在untracked files中
$git status
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
这时候运行git reset --hard,
$git reset --hard
该命令把tracked file中的改动,即和commit中不一致的全部丢弃。但是,不会影响untracked file,所以这个时候运行git status,结果一样。
要把Untracked files清除掉,要用到git clean
$ git clean -df
Removing test.txt
这里的-d表示对于directory也要深入进去,-f是当clean.requireForce不为false的时候必须要有的。
这时候运行git status,会发现untracked files中已经为空:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
再来说说 .gitignore 文件,
$nano .gitignore
每一行(除掉comment部分)都是一种类型的文件,被git ignore,即忽视的。比方说*.ko,*.mod, *.o 文件,它们都是modules在编译过程中产生的文件。所有符合这些特征的文件,在git status中都不会显示,所以前面我们看不到这些文件(即使有)。
但是,如果运行git clean的时候加上-x选项,.gitignore文件将被忽略,也就是符合.gitignore文件中定义的特征的文件也会被移除。
$git clean -dfx
会出现大量的这类文件被移除
再来谈谈git diff, 如上如果新创建一文件,
$git diff
返回为空,而git status将会显示该文件在untracked files中。
而如果更改一git repo中原有文件,如sound/last.c
$ git diff
diff --git a/sound/last.c b/sound/last.c
index f0bb98780e70..bfa852c64419 100644
--- a/sound/last.c
+++ b/sound/last.c
@@ -7,6 +7,7 @@
#include <linux/init.h>
#include <sound/core.h>
+//try git diff
static int __init alsa_sound_last_init(void)
{
struct snd_card *card;
会显示修改后文件的不同。实际上是在working directory中的文件和在index中的文件的不同。
运行git status会显示该文件在changes not staged for commit:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: sound/last.c
no changes added to commit (use "git add" and/or "git commit -a")
运行git restore <file>会放弃该改变
$ git restore sound/last.c
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
再运行git status该改变已经放弃。
总结,(1) git reset 不会影响untracked files (2) git status 会列出untracked files, 但是.gitignore中规定的类型除外 (3)git clean -dfx会清除在.gitignore中的类型的文件, git clean -df不会。(4) git diff不会显示untracked files,只显示已经在git repo中已有文件的修改。