ソースファイルを変更した最新のコミットを探したい。ファイルを修正した最新のgit commitを見つけるにはどうすればよいですか?
私はgit blame
を使ってコミットの日付を各行で見ることができますが、どのコミットがファイルに最後に触れるのか正確に見るのは難しいです。
私のgitリポジトリ内の特定のファイルにアクセスした最後のコミットを見つける方法はありますか?あなたがこれを書くことができるように
ソースファイルを変更した最新のコミットを探したい。ファイルを修正した最新のgit commitを見つけるにはどうすればよいですか?
私はgit blame
を使ってコミットの日付を各行で見ることができますが、どのコミットがファイルに最後に触れるのか正確に見るのは難しいです。
私のgitリポジトリ内の特定のファイルにアクセスした最後のコミットを見つける方法はありますか?あなたがこれを書くことができるように
git log
は、特定のファイル(やディレクトリ)の歴史を見てサポートしています。
git log my/file.c
あなたが本当にのみを使用するたとえば、最新のコミットを一覧表示したい場合そのスクリプトで、あなたは-n 1
を使用することができます。
git log -n 1 --pretty=format:%H -- my/file.c
--pretty=format:%h
はコミットのハッシュ(TheBamfのおかげで)表示するようにgit log
に指示します。 --
セパレータは、あいまいな場合に備えて、ファイル名がコミット名として解釈されるのを止めます。
このファイルが変更されたコミットを取得するには、git log <thefile>
を実行する場合は、これが望ましいかどうかはわかりませんが、一番上のものを選ぶことができます。それはあなたが探しているものでなければなりません。
'git log -n1 -
良い点。私は '-n'をスキップして' -1'を直接使うこともできると思います。 –
git log FILENAME
を使用して見たいコミットのSHA IDを取得したら、git show SHA_ID_HERE
を実行して、その特定のコミットに行ったことを確認できます。 ID全体を入力する必要はありません。最初の6文字で十分です。
これはOPの要求より少し上ですが、これを1つのライナーにまとめることができます: 'git show $(git log -1 --pretty ="%H " - ファイル名)' –
ああ、そうですさらに簡単に。先端に感謝します。 – Joe
、1本のライン上のちょうど参照を取得しようとする:
git log -n1 --oneline <path> | awk '{print $1;}'
あなただけの最新のハッシュを取得したい場合は、ファイルの特定のセットを変更するためにコミット(およびawk
を避けたい)あなたがすることができます使用:
git log -n 1 --pretty=format:%h -- <path>
これがその後git describe
で使用するためのコミットハッシュを取得するのに役立ちます。例えば
(場合には、それは誰のために便利です)...
私は、最新の(あなたがmycode-1.2.1
のようなタグでバージョンをマークすると仮定して)すべてのソースファイルを変更するためにコミット考慮することによって、現在のバージョンIDを作成します。
COMMIT=$(git log -n 1 --pretty=format:%h -- *.c *.h)
if VN=$(git describe --always --abbrev=5 --match "mycode-*" $COMMIT 2>/dev/null) &&
case "$VN" in
mycode-*)
git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD *.c *.h)" ||
VN="$VN-mod" ;;
*) VN="mycode-unknown-g$VN" ;;
esac
then
continue
else
VN="mycode-unknown"
fi
これは次のようにIDを生成します。
mycode-1.2.1
- とき番目の現在の状態ソースファイルの現在の状態がタグ付けされたバージョンmycode-1.2.1-g3k7s2-mod
、次のコミットに該当する場合 - - ソースファイルの現在の状態が以降に変更された電子のソースファイルは、タグ付きバージョンmycode-1.2.1-g3k7s2
に対応します最後にタグ付けされたバージョンmycode-unknown
を、次のコミット - まだあなた場合はタグが'$ VN'は悪夢のような悪夢のようなものです。SVN – ThorSummoner
を作成したバージョンがあっていない場合がの最新のコミットを見つけたら、git-log
を望ましくない場合は、そのファイルを変更しているコミット・オブジェクトをリストするgit-rev-list
が、そのコミット・パスで最新のものから順に(時系列に)開始します。簡単に言えば:git-rev-list
については
git rev-list -1 <commit> <filename>
をあなたの場合、あなただけの供給に:含まれるように
215095e2e338525be0baeeebdf66bfbb304e7270
と相対含ま:
これはちょうど、最新のは、そのファイル、元を変更し、現在のブランチにIDをコミット返します元にワイルドカードを持つパス名、:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
...最近の変更は、そのブランチの歴史の中で、ワイルドカードの試合に何であったかを教えてくれます。 rev-listのオプションは極端で、最も重要な配管コマンドの1つなので、あなたが想像できるどんな基準でも含めるか除外することができます。
もちろん、git-rev-list(1) Manual Pageを参照してください。
' git-log'を使うのがなぜ劣るのかあなたは本当に説明しませんでした。 –
私は劣等ではないと言っていますが、デフォルトでは無関係な情報を提供しています。 git-rev-listはコミットIDを返すだけです。これはスクリプトやその他の自動化プロセスにレスポンスを送る場合に必要なものです。 git-logは、選択されたコミットについての情報を返します。まず、git-rev-listを使用してコミットIDを収集し、次に各コミットに関する情報を収集します。コミット情報を除外してIDを使用する場合は、まずgit-rev-listを使用します。ログはrev-listに基づいているため、ほとんど同じフィルタパラメータを使用します。 –
'git-log'は磁器で、' git-rev-list'は配管です。 – blitzen9872
最後にブランチに関係なくファイルが変更されたことを知りたい場合は、 '--all'オプションを追加することですべてのブランチを検討することができます。 –