回答:
あなただけしたい場合は見つける最新のは、あなたが望んでいない、コミットgit-log
したい、git-rev-list
最新のもの(時系列)で始まる、パスをコミットすることで、そのファイルを、変更するオブジェクトをコミットしているリスト、。簡単に言えば:
git rev-list -1 <commit> <filename>
git-rev-list
あなたの場合のために、あなたは単に供給します:
これは、現在のブランチで最新のコミットIDを返し、そのファイルを変更するだけです。例: 215095e2e338525be0baeeebdf66bfbb304e7270
より複雑な例として、タグ名やリモート参照を使用し、ワイルドカードを使用して相対パス名を含めることができます。例:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
...これは、そのブランチの履歴におけるワイルドカードの一致に対する最新の変更点を示しています。rev-listのオプションは極端です。これは最も重要な配管コマンドの1つであるため、想像できるほぼすべての基準で包含または除外できます。
もちろん、git-rev-list(1)マニュアルページを参照してください。
git-log
が劣っている理由を説明しませんでした。
git-log
磁器、git-rev-list
配管です。
特定のファイルセットを変更するために最新のコミットのハッシュを取得したい場合(そしてを避けたいawk
場合)は、次のコマンドを使用できます。
git log -n 1 --pretty=format:%h -- <path>
これは、後でで使用するためのコミットハッシュを取得するのに役立ちgit describe
ます。
たとえば(誰にとっても便利な場合)…
ソースファイルを変更する最新のコミットを検討して、現在のバージョンIDを作成します(バージョンにのようなタグを付けたと仮定mycode-1.2.1
):
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
-ソースファイルの現在の状態がタグ付きバージョンに続くコミットに対応する場合mycode-1.2.1-g3k7s2-mod
-ソースファイルの現在の状態が、タグ付けされたバージョンに続く最後のコミット以降に変更されたときmycode-unknown
-バージョンタグがまだ作成されていない場合$VN
ある種の悪夢のアンデッドSVNのように見えます
これがあなたが望むものであるかどうかはわかりませんが、git log <thefile>
そのファイルを変更したコミットを取得するために行うかどうかはわかりません。一番上のものを選ぶことができます。それはあなたが探しているものでなければなりません。
git log -n1 -- <thefile>
(またはhead -1
リソースを無駄にしたい場合は、出力をパイプ処理する)、手動で一番上の行を選択する必要はありません(Jo Lissの回答を参照)
-n
使用-1
することもできると思います。
使用して確認したいコミットのSHA IDを取得したら、その特定のコミットに対して何をしたかを確認git log FILENAME
できるはずgit show SHA_ID_HERE
です。ID全体を入力する必要さえありません。最初の6文字で十分です。
git show $(git log -1 --pretty="%H" -- FILENAME)
--all
オプションを追加してすべてのブランチを考慮することができます。