1

注意到一个奇怪的行为git diff

我想用 HEAD 来区分我的一些工作文件,比如dir/a.hdir/a.cc.

当我使用git diff HEAD它时效果很好,但是我更改的文件不止这两个。所以我将命令更改为git diff HEAD -- * a.*. 令人惊讶的是,它在 HEAD 中找不到这两个文件并将它们视为新添加的。

$ git diff --stat HEAD
 dir/a.cc |   32 ++++++++++----------------
 dir/a.h  |   12 +++++-----
 2 files changed, 18 insertions(+), 26 deletions(-)

$ git diff --stat HEAD -- *a.*
 dir/a.cc |  208 +++++++++++++++++++++++++++
 dir/a.h  |  142 ++++++++++++++++++
 2 files changed, 350 insertions(+), 0 deletions(-)

==================================================== ======================

更新:为了避免我的代码库有任何特殊之处,我添加了一个新目录和 2 个新文件,仅用于测试。

首先我提交了 dir2/bh 和 dir2/b.cc,这两个文件只有一行内容。然后我对这些文件做了一些小改动并测试了 git diff。

这是正确的行为:

$ git diff --stat HEAD 
 dir2/b.cc |    2 +-
 dir2/b.h  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

这也是正确的:

$ git diff --stat HEAD -- dir2/*b.*
 dir2/b.cc |    2 +-
 dir2/b.h  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

但这很奇怪(将两个文件都视为新文件):

$ git diff --stat HEAD -- *b.*
 dir2/b.cc |    1 +
 dir2/b.h  |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

@Chronial,我在我的回购的根目录中。@jszakmeister,因为这两个文件是新的,似乎它与重命名/移动无关......

“git 状态”是正确的:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   dir2/b.cc
#       modified:   dir2/b.h
#
no changes added to commit (use "git add" and/or "git commit -a")

我认为这可能是与 bash "*" 匹配有关的问题。但仍然不明白这种行为......

4

0 回答 0