SVNのログには、 " - v"モードがあり、各コミットで変更されたファイルのファイル名を次のように出力します。
jes5199 $ svn log -v --------------------------------------- --------------------------------- r1 | --------------------------------- jes5199 | 2007-01-03 14:39:41 -0800(2007年1月3日水曜日) 1行 変更されたパス: A /AUTHORS [A] A /COPYING [A] C/ChangeLog [A]/EVOLUTION [A] IN /MacOSX
Gitの各コミットで変更されたファイルのリストを手早く取得する方法はありますか?
変更されたファイルのフルパス名の場合
git log --name-only
フルパス名と変更されたファイルのステータスの場合
git log --name-status
省略形のパス名と変更されたファイルのdiffstatの場合:
git log --stat
もっとたくさんのオプションがあります、 ドキュメントをチェックしてください 。
注:git whatchanged
は非推奨です。代わりにgit log
を使用してください
新しいユーザは、代わりに git-log [1] を使用することをお勧めします。
whatchanged
コマンドは本質的に git-log [1] と同じですが、デフォルトではrawフォーマットのdiff出力を表示し、マージをスキップします。このコマンドは主に歴史的な理由で保管されています。 Linuxカーネルメーリングリストを読んで
git log
が発明されるずっと前にGitを学んだ多くの人々の指がそれをタイプするように訓練されています。
各コミットで変更されたファイルのリストを(コミットメッセージとともに)取得するには、コマンドgit whatchanged --stat
を使用できます。
git show
も素晴らしいコマンドです。
これはsvn diff
のようなものですが、それをcommit guidに渡してその差分を見ることができます。
残りのコミットメッセージを使わずにファイル名だけを取得したい場合は、次のようにします。
git log --name-only --pretty=format: <branch name>
その後、ファイル名を含むさまざまなオプションを使用するように拡張できます。
git log --name-status --pretty=format: <branch name>
git log --stat --pretty=format: <branch name>
この方法を使用するときに注意することの1つは、無視される必要がある空白行が出力にあることです。ローカルブランチで変更されているが、まだリモートブランチにプッシュされていないファイルや、リモートからの最新のファイルがすでに取り込まれているという保証がない場合は、これを使用すると便利です。 :
git log --name-only --pretty=format: my_local_branch --not Origin/master
ローカルブランチで変更されているが、まだリモートブランチのマスターブランチにマージされていないすべてのファイルを表示します。
私は毎日これを使用して、変更されたファイルの履歴を表示します。
git log --stat --pretty=short --graph
短くするには、次のようにして.gitconfig
にエイリアスを追加します。
git config --global alias.ls 'log --stat --pretty=short --graph'
私はこれを使う:
git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq
ファイルのみのリストとその状態(追加、変更、削除)を出力します。
A sites/api/branding/__init__.py
M sites/api/branding/wtv/mod.py
...
git diff --stat HEAD^!
は、最後のコミットで変更されたファイルと追加/削除された行数を示します(HEAD
)。
ファイル名だけで構成され、一度にいくつかのコミットについて追加された行数と削除された行数からなる簡潔な出力を得るための単一のコマンドがないように私は思われます。
#!/bin/bash
for ((i=0; i<=$1; i++))
do
sha1=`git log -1 --skip=$i --pretty=format:%H`
echo "HEAD~$i $sha1"
git diff --stat HEAD~$(($i+1)) HEAD~$i
done
例えばと呼ばれる。 HEAD
から./changed_files 99
への簡潔な形式の変更を取得するためのHEAD~99
。パイプで送ることができます。 less
へ。
以下は、コミットごとに変更されたファイルを簡潔な形式でリストするのに理想的な表示です。
git log --pretty=oneline --graph --name-status
別の便利なコマンドはgit diff-tree <hash>
でしょう。ここでhashはハッシュ範囲でもあり得ます(<old>..<new>
notationで表されます)。出力例
$ git diff-tree HEAD
:040000 040000 8e09a be406 M myfile
フィールドは以下のとおりです。
ソースモード、destモード、sourceハッシュ、destハッシュ、ステータス、ファイル名
ステータスはあなたが期待するものです: _ d _ (削除)、 _ a _ (追加)、 _ m _ (修正)などmanを参照完全な説明のためのページ。
私は通常ログを取得するためにこれらを使用します。
$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"
$ git log --name-status --grep="<text from Commit message>"