私はリポジトリにたくさんのコミットがあります。 SHA1からSHA2への2つのコミットの間に変更されたファイルのリストを見たいです。
どんなコマンドを使うべきですか?
git diff --name-only SHA1 SHA2
コミットを識別するために必要なだけのSHAを含める必要があります。また、例えば、
git diff --name-only HEAD~10 HEAD~5
最新の10回目のコミットと5回目の最新のコミット(またはその程度)の違いを確認する.
git diff --name-status [SHA1 [SHA2]]
--name-onlyに似ていますが、ファイルに何が起こったのかを示す単純な接頭辞が付きます(変更、削除、追加など)。
git log --name-status --oneline [SHA1..SHA2]
似ていますが、コミットはコミットメッセージの後にリストされているので、ファイルがいつ変更されたかを見ることができます。
特定のファイルやフォルダに起こったことだけに興味があるなら、-- <filename> [<filename>...]
バージョンにgit log
を追加することができます。
1回のコミットで何が起きたのかを知りたい場合は、SHA1としてから、git log --name-status --oneline [SHA1^..SHA1]
ファイル状態フラグ
M変更 - ファイルが変更されました
Cコピー編集 - ファイルがコピーされ変更されました
R rename-edit - ファイルの名前が変更され変更されました
追加 - ファイルが追加されました
D削除 - ファイルは削除されました
U unmerged - ファイルはマージ後に競合します
しかし、あなたのブランチと他のブランチとの共通の祖先の間でファイルが変わっているのを見るために(Origin/masterと言います):
git diff --name-only `git merge-base Origin/master HEAD`
スイッチ--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(-)
2つのブランチ間で変更されたファイルを表示したい場合は、@ artfulrobotの回答を補完します。
git diff --name-status mybranch..myotherbranch
優先順位に注意してください。新しいブランチを最初に配置すると、ファイルは追加されずに削除されたものとして表示されます。
grep
を追加すると、さらに細かくすることができます。
git diff --name-status mybranch..myotherbranch | grep "A\t"
そうするとmyotherbranch
に追加されたファイルだけが表示されます。
以下のエイリアスをあなたの~/.bash_profile
に追加してから、source ~/.bash_profile
を実行してください。最後のコミットで更新されたファイルを見る必要があるときはいつでも、gitリポジトリからshowfiles
を実行してください。
alias showfiles='git show --pretty="format:" --name-only'
これはファイルの変更を表示します。
git diff --Word-diff SHA1 SHA2
git log --pretty = oneline> C:\ filename.logを使用してください。
変更されたファイルの名前を表す1つのオンライン(--pretty = oneline)だけが記録されます。またすべての詳細をあなたの出力ファイルに記録します。
最後のコミットとその前のコミットの間に変更されたファイルを見たいだけの場合も、注意してください。これはうまくいきます:git show --name-only
Artfulrobotが彼の答えで言ったように:
git diff --name-status [SHA1 [SHA2]]
私の例:
git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997
4b95d595812211553070046bf2ebd807c0862cca
M views/layouts/default.ctp
M webroot/css/theme.css
A webroot/img/theme/logo.png
git diff --name-status
に基づいて、私は git-diffview gitエクステンションを書きました。
以下は私にはうまくいきます:
$ git show --name-only --format=tformat: SHA1..SHA2
単一のコミットでも使用できます。
git show --name-only --format=tformat: SHA1
これは、あなたがchangeSet SHAのリストを提供されていて、どのファイルが変更されたかを見るためにそれらを反復したい、Jenkinsでの使用に便利です。
これは上記のいくつかの答えに似ていますが、tformat:
ではなくformat:
を使用すると、コミットの間の区切りスペースが削除されます。
Javaファイルだけに集中する必要がある人にとっては、これが私の解決策です。
git diff --name-status SHA1 SHA2 | grep '\.Java$'