Jawaban:
The --follow
bekerja untuk file tertentu
git log --follow -- filename
Perbedaan dengan solusi lain yang diberikan
Perhatikan bahwa solusi lain termasuk git log path
(tanpa --follow
). Pendekatan itu berguna jika Anda ingin melacak mis perubahan dalam direktori , tetapi tersandung ketika file diubah namanya (dengan demikian gunakan --follow filename
).
--follow
akun untuk penggantian nama, jadi ini lebih kuat daripadagit log -- path
--follow
menerima jalur , yang bisa berupa file tetapi juga direktori. Dalam kasus yang terakhir ini akan berjalan secara rekursif dan melaporkan perubahan ke semua file di bawah titik itu. (Perilaku ini tidak didokumentasikan di halaman manual dan mungkin tidak permanen.)
git log filename?
git log filename
tidak mengikuti penggantian nama file, artinya akan menampilkan semua commit terkait nama file itu (bukan file sebenarnya). Jika Anda membuat file X
dan Y
, mengubah keduanya, lalu dihapus Y
dan diubah namanya X
menjadi Y
dan kemudian juga diubah, dan Anda jalankan git log Y
, Anda akan mendapatkan pesan untuk yang lama Y
dan yang baru . Dan sebaliknya, dengan --follow
Anda akan mendapatkan komitmen mengenai file itu ketika dinamai X
dan kapan dinamai Y
.
git log path
harus melakukan apa yang Anda inginkan. Dari git log
pria itu :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
Saya telah melihat ini dengan seksama dan semua jawaban ini tampaknya tidak benar-benar menunjukkan kepada saya semua komitmen di semua cabang.
Inilah yang saya dapatkan dengan bermain-main dengan opsi tampilan edit gitk. Ini menunjukkan saya semua komit untuk file terlepas dari cabang, lokal, reflog, dan jarak jauh.
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
Ini juga bekerja dengan git log
:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflog
mencakup komit yang diubah / diubah atau dibuang. Mungkin itu harus jelas, tetapi saya mencoba menggunakan ini git log
dan mencoba mencari tahu mengapa saya melihat duplikat yang tampaknya dilakukan!
Gunakan perintah di bawah ini untuk mendapatkan komitmen untuk file tertentu:
git log -p filename
git log -p mybranch -- filename
atau hanya gunakan git log --all -- filename
untuk melihat di semua cabang.
Itu harus sesederhana git log <somepath>
; periksa halaman manual ( git-log(1)
).
Secara pribadi saya suka menggunakan git log --stat <path>
sehingga saya bisa melihat dampak dari setiap komit pada file.
-p
jika Anda ingin melihat diff penuh, bukan hanya itu beberapa baris dimodifikasi.
git show
pada komitmen tertentu yang terlihat penting.
Atau (sejak Git 1.8.4), dimungkinkan juga untuk mendapatkan semua commit yang telah mengubah bagian tertentu dari file. Anda bisa mendapatkan ini dengan melewati garis awal dan nomor garis akhir.
Hasil yang dikembalikan adalah daftar commit yang memodifikasi bagian khusus ini. Perintahnya seperti:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
dimana upperLimit
adalah start_line_number
dan lowerLimit
adalahending_line_number
Info Lebih Lanjut - https://www.techpurohit.com/list-some-useful-git-commands
Seperti yang ditunjukkan oleh jackrabb1t, --follow
lebih kuat karena terus mencatat sejarah di luar penggantian nama / gerakan. Jadi, jika Anda mencari file yang saat ini tidak di jalur yang sama atau file yang telah diubah namanya di berbagai komit, - ikuti akan melacaknya.
Ini bisa menjadi pilihan yang lebih baik jika Anda ingin memvisualisasikan perubahan nama / jalur:
git log --follow --name-status -- <path>
Tetapi jika Anda ingin daftar yang lebih ringkas dengan hanya yang penting:
git log --follow --name-status --format='%H' -- <path>
atau bahkan
git log --follow --name-only --format='%H' -- <path>
Kelemahannya adalah --follow
hanya berfungsi untuk satu file.
--follow
berfungsi untuk satu jalur , yang bisa berupa direktori. Jika melewati direktori itu akan berjalan secara rekursif dan melaporkan perubahan ke semua file di bawah titik itu.
Jika Anda ingin melihat semua komit yang mengubah file, di semua cabang, gunakan ini:
git log --follow --all <filepath>
Jika Anda ingin mencari semua komitmen dengan filename
dan bukan oleh filepath
, gunakan:
git log --all -- '*.wmv'
Jika Anda ingin melihat semua perubahan yang dilakukan dalam komit yang mengubah file tertentu (bukan hanya perubahan pada file itu sendiri), Anda dapat meneruskan --full-diff
:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
Dengan asumsi paket "gitk" sudah diinstal.
Jika tidak diinstal, lakukan ini:
sudo apt-get install gitk
Dan kemudian coba perintah di atas. Ini untuk Linux ... Mungkin membantu pengguna Linux jika mereka menginginkan GUI.
gitk
dibundel dengan Git untuk Windows.
Untuk mendapatkan daftar hash komit gunakan git rev-list
git rev-list HEAD <filename>
Keluaran:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
yang berarti 5 komit telah menyentuh file ini. Ini urutan kronologis terbalik, jadi komit pertama dalam daftar b7c4f0d7
adalah yang terbaru.
Di Linux Anda bisa menggunakan gitk untuk ini.
Ini dapat diinstal menggunakan "sudo apt-get install git-gui gitk". Itu dapat digunakan untuk melihat komit file tertentu dengan "gitk <Filename>".
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>