我在代码库中有一堆提交记录,我想查看两个提交记录间修改的文件列表 —— 从 SHA1 到 SHA2。
我应该使用什么命令?
答案:您可以使用以下命令来查看两个提交记录间修改的文件列表:git diff --name-only SHA1 SHA2
我在代码库中有一堆提交记录,我想查看两个提交记录间修改的文件列表 —— 从 SHA1 到 SHA2。
我应该使用什么命令?
答案:您可以使用以下命令来查看两个提交记录间修改的文件列表:git diff --name-only SHA1 SHA2
git diff --name-only SHA1 SHA2
dir 1/dir 2/filename.ext
dir 3/dir 4/other filename.ext
git diff --name-only HEAD~10 HEAD~5
查看第十个最新的提交和第五个最新的提交之间的差异(或者如此)。
git show
命令。使用git show --name-only SHA1
。 - August Lilleaasgit diff --name-status [TAG|SHA1]
显示了对文件进行的操作。 - reconbotgit diff --name-only HEAD@{3} HEAD@{0}
- b01git diff --name-status
似乎不会显示已添加的文件。@sschuberth指出了git show
,这对我来说确实有效:git show --pretty=format: --name-status
。只是运行git show --name-status
可以提供更多信息,但仍然简洁明了…… 这将成为我的新常用命令 ;) - travcgit diff --name-status [SHA1 [SHA2]]
git diff --name-status类似于--name-only,但是它会在文件名前面添加一个简单的前缀,告诉您文件发生了什么变化(修改、删除、添加...)
git log --name-status --oneline [SHA1..SHA2]
Git的git log
命令和Unix的less
命令类似,但是提交记录是按照提交信息列出来的,所以你可以看到文件的修改时间。
如果您只关心某些文件/文件夹发生了什么,可以在git log
版本后附加--<filename> [<filename>...]
如果您想查看单个提交记录发生了什么,请调用它的SHA1,然后执行
git log --name-status --oneline [SHA1^..SHA1]
文件状态标志:
标志 | 名称 | 含义 |
---|---|---|
M |
修改 | 文件已被修改 |
C |
复制编辑 | 文件已被复制并修改 |
R |
重命名编辑 | 文件已被重命名并修改 |
A |
添加 | 文件已被添加 |
D |
删除 | 文件已被删除 |
U |
未合并 | 文件在合并后存在冲突 |
--relative[=<path>]
选项可能会有帮助,但我不确定。否则,总是可以使用 | erep -v '(.tmp|.foo|.dontwant)$'
... - artfulrobotegrep
? - David Moles看起来没有人提到开关--stat
:
$ git diff --stat HEAD~5 HEAD
.../java/org/apache/calcite/rex/RexSimplify.java | 50 +++++++++++++++++-----
.../apache/calcite/sql/fun/SqlTrimFunction.java | 2 +-
.../apache/calcite/sql2rel/SqlToRelConverter.java | 16 +++++++
.../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
.../org/apache/calcite/test/RexProgramTest.java | 24 +++++++++++
.../apache/calcite/test/SqlToRelConverterTest.java | 8 ++++
.../apache/calcite/test/SqlToRelConverterTest.xml | 15 +++++++
pom.xml | 2 +-
.../apache/calcite/adapter/spark/SparkRules.java | 7 +--
9 files changed, 117 insertions(+), 26 deletions(-)
还有 --numstat
$ git diff --numstat HEAD~5 HEAD
40 10 core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1 1 core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16 0 core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8 11 core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24 0 core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8 0 core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15 0 core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1 1 pom.xml
4 3 spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java
并且使用 --shortstat
$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)
如果要查看你的分支与另一个分支(比如origin/master)的共同祖先之间有哪些文件发生了变化:
git diff --name-only `git merge-base origin/master HEAD`
git show --pretty=format: --name-only origin/master..
。 - sschuberthgit diff --name-only master..branch
不对应 Github PR 列表。这种方式更精确。但无论如何,我的修改文件有173个,而 Github PR 中只有171个。(没有使用 merge-base
的情况下,我的修改文件有228个,而 Github PR 中只有171个) - x'ES--merge-base
选项来实现相同的结果,而无需执行两个命令,像这样:git diff --name-only --merge-base origin/master
。来源:https://git-scm.com/docs/git-diff - AnythingIsFinegit --no-pager diff --name-only sha1 sha2
--no-pager
是非常关键的。感谢你的突出表现。 - Will Huang--no-pager
选项的另一种替代方法是直接使用管道符号 |
并将输出传递给 cat
命令(尽管这样会失去颜色):git diff --name-only sha1 sha2 | cat
。 - Andre Mcore.pager=less -+X -F
- 短输出将显示在控制台中,长输出(需要滚动)将显示在分页器中,非常必要。 - bloodygit diff --name-status mybranch..myotherbranch
注意优先级。如果您首先放置较新的分支,则会显示文件已删除而不是已添加。
使用grep
可以进一步细化:
git diff --name-status mybranch..myotherbranch | grep "A\t"
那么就只会显示在 myotherbranch
分支中添加的文件。
--diff-filter
的原生功能已经提供了此功能,这意味着减少了错误结果(例如误报)的机会。 - Jasper另外请注意,如果你只想查看最后一次提交和上一次提交之间的更改文件,那么可以这样做:
git show --name-only
~/.bash_profile
文件中,然后运行source ~/.bash_profile
。现在,每当您需要查看最后一次提交中更新的文件时,请从您的git存储库运行showfiles
。alias showfiles='git show --pretty="format:" --name-only'
git config --global alias.showfiles 'show --pretty="format:" --name-only'
可以创建一个名为 git showfiles
的 Git 别名,并使其显示仅文件名,格式为 --pretty="format:" --name-only
。 - cgmbgit show --name-only --format=tformat: SHA1..SHA2
它也可以与单个提交一起使用:
git show --name-only --format=tformat: SHA1
tformat:
而不是format:
可以去除提交之间的分隔空格。git diff --word-diff SHA1 SHA2