git reset, git status, git clean, .gitignore, git diff, git restore 的关系梳理

当进入装有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中已有文件的修改。 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值