Apakah Anda mencari perubahan pada file di satu cabang; di semua cabang lokal; di semua cabang pada satu remote; atau di semua itu? Saya pikir di semua itu akan membutuhkan skrip.
benhorgen
Jawaban:
1083
The --followbekerja 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).
+1 --followakun untuk penggantian nama, jadi ini lebih kuat daripadagit log -- path
Gabe Moothart
42
Perhatikan bahwa --followmenerima 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.)
StvnW
5
Apa perbedaan antara yang satu itu dan yang barugit log filename?
VaTo
8
@ SaulOrtega, git log filenametidak mengikuti penggantian nama file, artinya akan menampilkan semua commit terkait nama file itu (bukan file sebenarnya). Jika Anda membuat file Xdan Y, mengubah keduanya, lalu dihapus Ydan diubah namanya Xmenjadi Ydan kemudian juga diubah, dan Anda jalankan git log Y, Anda akan mendapatkan pesan untuk yang lamaY dan yang baru . Dan sebaliknya, dengan --followAnda akan mendapatkan komitmen mengenai file itu ketika dinamai Xdan kapan dinamai Y.
MarSoft
7
gunakan "git log --all filename" untuk melihat semua komit di semua cabang
Lebnik
122
git log pathharus melakukan apa yang Anda inginkan. Dari git logpria 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.
Tidak berfungsi jika jalur file telah berubah. Jawaban jackrabbit berhasil untuk kasus ini.
kwahn
1
Ini berfungsi jika Anda perlu membatasi log ke cabang tertentu
ams
63
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.
Ini sempurna untuk ketika seseorang membuat perubahan tetapi mereka lupa di mana mereka melakukan perubahan.
earthmeLon
2
Sangat berguna. Termasuk juga simpanan komit
Juan Antonio Tubío
Ini harus menjadi jawaban yang lebih disukai. Pertanyaannya adalah untuk menemukan semua komitmen, yang ini lakukan.
carl verbiest
Pemberitahuan yang --reflogmencakup komit yang diubah / diubah atau dibuang. Mungkin itu harus jelas, tetapi saya mencoba menggunakan ini git logdan mencoba mencari tahu mengapa saya melihat duplikat yang tampaknya dilakukan!
Soren Bjornstad
43
Gunakan perintah di bawah ini untuk mendapatkan komitmen untuk file tertentu:
Saya mengerti bahwa ini tidak sepenuhnya menjawab pertanyaan karena dia ingin daftar komitmen tetapi ini adalah emas dan masuk ke file saya.
zkent
3
Ini tidak akan berfungsi sama sekali jika file tersebut tidak ada di cabang yang saat ini ditutup. Anda dapat menambahkan cabang suka git log -p mybranch -- filenameatau hanya gunakan git log --all -- filenameuntuk melihat di semua cabang.
Soren Bjornstad
37
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.
Atau bahkan -pjika Anda ingin melihat diff penuh, bukan hanya itu beberapa baris dimodifikasi.
Cascabel
Benar, tapi itu cukup berisik mengingat sebagian besar file telah diubah berkali-kali selama hidup mereka. Saya tidak ingin melihat perbedaan penuh dari setiap commit yang pernah menyentuh file. Saya biasanya mencari hal tertentu, jadi saya bisa mendapatkan log dengan dampak yang adil dan kemudian git showpada komitmen tertentu yang terlihat penting.
rfunduk
git log --stat --follow - * .html => daftar hasil komit dengan tepat satu file di setiap komit. Sangat bagus!
Sergio Belevskij
18
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:
Seperti yang ditunjukkan oleh jackrabb1t, --followlebih 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:
--followberfungsi 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.
StvnW
10
Jika Anda mencoba - ikuti file yang dihapus dalam penggunaan komit sebelumnya
Untuk gitpemula: Gunakan git log -p --follow -- filenameuntuk menampilkan perubahan juga. Perhatikan juga: "nama file" bisa berupa file, direktori atau submodule.
Tino
8
Jika Anda ingin melihat semua komit yang mengubah file, di semua cabang, gunakan ini:
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:
Jawaban:
The
--follow
bekerja untuk file tertentuPerbedaan 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
).sumber
--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 fileX
danY
, mengubah keduanya, lalu dihapusY
dan diubah namanyaX
menjadiY
dan kemudian juga diubah, dan Anda jalankangit log Y
, Anda akan mendapatkan pesan untuk yang lamaY
dan yang baru . Dan sebaliknya, dengan--follow
Anda akan mendapatkan komitmen mengenai file itu ketika dinamaiX
dan kapan dinamaiY
.git log path
harus melakukan apa yang Anda inginkan. Darigit log
pria itu :sumber
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.
Ini juga bekerja dengan
git log
:sumber
--reflog
mencakup komit yang diubah / diubah atau dibuang. Mungkin itu harus jelas, tetapi saya mencoba menggunakan inigit log
dan mencoba mencari tahu mengapa saya melihat duplikat yang tampaknya dilakukan!Gunakan perintah di bawah ini untuk mendapatkan komitmen untuk file tertentu:
sumber
git log -p mybranch -- filename
atau hanya gunakangit 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.sumber
-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:
dimana
upperLimit
adalahstart_line_number
danlowerLimit
adalahending_line_number
Info Lebih Lanjut - https://www.techpurohit.com/list-some-useful-git-commands
sumber
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:
Tetapi jika Anda ingin daftar yang lebih ringkas dengan hanya yang penting:
atau bahkan
Kelemahannya adalah
--follow
hanya berfungsi untuk satu file.sumber
--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 mencoba - ikuti file yang dihapus dalam penggunaan komit sebelumnya
sumber
git
pemula: Gunakangit log -p --follow -- filename
untuk menampilkan perubahan juga. Perhatikan juga: "nama file" bisa berupa file, direktori atau submodule.Jika Anda ingin melihat semua komit yang mengubah file, di semua cabang, gunakan ini:
sumber
Jika Anda ingin mencari semua komitmen dengan
filename
dan bukan olehfilepath
, gunakan:sumber
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
:sumber
[branch]
Gunakan
git log --all <filename>
untuk melihat komit yang memengaruhi<filename>
di semua cabang.sumber
Dengan asumsi paket "gitk" sudah diinstal.
Jika tidak diinstal, lakukan ini:
Dan kemudian coba perintah di atas. Ini untuk Linux ... Mungkin membantu pengguna Linux jika mereka menginginkan GUI.
sumber
gitk
dibundel dengan Git untuk Windows.Untuk mendapatkan daftar hash komit gunakan
git rev-list
Keluaran:
yang berarti 5 komit telah menyentuh file ini. Ini urutan kronologis terbalik, jadi komit pertama dalam daftar
b7c4f0d7
adalah yang terbaru.sumber
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>".
sumber
Referensi
sumber