How to list only the file names that changed between two commits?
我在回购中有很多承诺。我希望看到在两次提交之间更改的文件列表-从sha1到sha2。
我应该使用什么命令?
1 | git diff --name-only SHA1 SHA2 |
您只需要包含足够的sha来标识提交。例如,您也可以这样做
1 | git diff --name-only HEAD~10 HEAD~5 |
号
看看第十个最新提交和第五个最新提交之间的区别。
1 | git diff --name-status [SHA1 [SHA2]] |
类似于--仅名称,除非您得到一个简单的前缀,告诉您文件发生了什么(修改、删除、添加…)
1 | git log --name-status --oneline [SHA1..SHA2] |
。
与此类似,但提交会在提交消息之后列出,因此您可以查看文件何时更改。
如果您对某些文件/文件夹发生的事情感兴趣,可以将
-- 附加到[ ...] git log 版本。如果你想知道一次提交发生了什么,就称之为sha1,然后做埃多克斯1〔2〕
文件状态标志:m modified-文件已修改C copy edit-文件已被复制和修改r重命名编辑-文件已重命名和修改添加的文件已添加D已删除-文件已删除u unmerged-合并后文件有冲突
似乎没有人提到交换机
1 2 3 4 5 6 7 8 9 10 11 | $ 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(-) |
还有
1 2 3 4 5 6 7 8 9 10 | $ 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 |
。
和
1 2 | $ git diff --shortstat HEAD~5 HEAD 9 files changed, 117 insertions(+), 26 deletions(-) |
号
但是,如果看到您的分支和它与另一个分支的共同祖先(比如origin/master)之间的文件发生了变化:
1 | git diff --name-only `git merge-base origin/master HEAD` |
要补充@artfulrobot的答案,如果要显示两个分支之间的更改文件:
1 | git diff --name-status mybranch..myotherbranch |
。
注意优先顺序。如果先放置较新的分支,那么它将显示文件为已删除而不是已添加。
添加EDOCX1[3]可以进一步改进:
1 | git diff --name-status mybranch..myotherbranch | grep"A\t" |
。
这将只显示添加到
将下面的别名添加到您的
1 | alias showfiles='git show --pretty="format:" --name-only' |
。
这将显示文件中的更改:
1 | git diff --word-diff SHA1 SHA2 |
另外请注意,如果您只想查看最后一次提交和之前一次提交之间更改的文件。这行得通:
正如Artfulrobot在回答中所说:
1 | git diff --name-status [SHA1 [SHA2]] |
我的例子:
1 2 3 4 5 | git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 4b95d595812211553070046bf2ebd807c0862cca M views/layouts/default.ctp M webroot/css/theme.css A webroot/img/theme/logo.png |
号
使用git log--pretty=oneline>c:filename.log
它只记录一行(--pretty=oneline),这是更改文件的名称。还将把所有详细信息记录到输出文件中。
对于那些只需要关注Java文件的人来说,这就是我的解决方案:
1 | git diff --name-status SHA1 SHA2 | grep '\.java$' |
号
以下内容对我很有用:
埃多克斯1〔13〕
它还可以与单个提交一起使用:
埃多克斯1〔14〕
这对于在Jenkins中使用非常方便,在那里您可以获得一个变更集sha的列表,并希望对它们进行迭代,以查看哪些文件已被更改。
这类似于上面的几个答案,但是使用
基于