当使用“ - <path>”标志</path>时,git diff将文件视为新添加的文件

时间:2012-10-17 02:02:51

标签: git diff git-diff

注意到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 / b.h和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 status”是正确的:

$ 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“*”匹配相关的问题。但还是不明白这种行为......

0 个答案:

没有答案