注意到git diff
的奇怪行为:
我想用HEAD区分我的一些工作文件,比如dir/a.h
和dir/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“*”匹配相关的问题。但还是不明白这种行为......