Bagaimana saya bisa melihat riwayat perubahan file individual di Git, melengkapi detail dengan apa yang telah berubah?
Saya sudah sampai sejauh:
git log -- [filename]
yang menunjukkan kepada saya sejarah komit file, tetapi bagaimana cara mendapatkan konten dari setiap perubahan file?
Saya mencoba membuat transisi dari MS SourceSafe dan yang dulunya sederhana right-click
→ show history
.
Jawaban:
Untuk ini saya akan menggunakan:
atau untuk mengikuti nama file yang lalu ganti nama
sumber
Kamu bisa menggunakan
untuk membiarkan git membuat tambalan untuk setiap entri log.
Lihat
untuk lebih banyak opsi - ini sebenarnya dapat melakukan banyak hal yang menyenangkan :) Untuk mendapatkan perbedaan untuk komit tertentu, Anda dapat
atau revisi lainnya oleh pengidentifikasi. Atau gunakan
untuk menelusuri perubahan secara visual.
sumber
git log --follow -p -- path-to-file
Ini akan menampilkan seluruh histori file (termasuk histori di luar nama dan dengan perbedaan untuk setiap perubahan).
Dengan kata lain, jika file bernama
bar
dulunya bernamafoo
, makagit log -p bar
(tanpa--follow
opsi) hanya akan menampilkan riwayat file sampai pada titik di mana namanya diubah - itu tidak akan menampilkan sejarah file ketika dikenal sebagaifoo
. Menggunakangit log --follow -p bar
akan menampilkan seluruh riwayat file, termasuk perubahan apa pun pada file ketika dikenal sebagaifoo
. The-p
pilihan memastikan bahwa diffs disertakan untuk setiap perubahan.sumber
--follow
memastikan bahwa Anda melihat nama file (2.)-p
memastikan bahwa Anda melihat bagaimana file diubah (3.) itu hanya baris perintah.--
telah ditambahkan, tapi saya tidak tahu mengapa ini yang terbaik? Apa itu?--
Opsi memberi tahu Git bahwa ia telah mencapai akhir opsi dan segala sesuatu yang mengikuti--
harus diperlakukan sebagai argumen. Untukgit log
ini hanya ada bedanya jika Anda memiliki nama jalur yang dimulai dengan tanda hubung . Katakanlah Anda ingin mengetahui riwayat file yang memiliki nama malang "--follow":git log --follow -p -- --follow
--
ini berguna karena bisa juga melindungi terhadaprevision
nama yang cocok dengan nama file yang Anda masukkan, yang sebenarnya bisa menakutkan. Sebagai contoh: Jika Anda memiliki cabang dan file bernamafoo
,git log -p foo
akan menunjukkan sejarah log git hinggafoo
, bukan sejarah untuk filefoo
. Tetapi @DanMoulding benar bahwa karena--follow
perintah hanya menggunakan satu nama file sebagai argumennya, ini kurang penting karena tidak bisa menjadirevision
. Saya baru tahu itu. Mungkin Anda benar mengabaikannya dari jawaban Anda saat itu; Saya tidak yakin.Jika Anda lebih memilih untuk tetap berbasis teks, Anda mungkin ingin menggunakan tig .
Instal Cepat:
# apt-get install tig
$ brew install tig
Gunakan untuk melihat riwayat pada satu file:
tig [filename]
Atau jelajahi riwayat repo terperinci:
tig
Mirip dengan
gitk
tetapi berbasis teks. Mendukung warna dalam terminal!sumber
tig -- path/to/specific/file
git whatchanged -p filename
juga setara dengangit log -p filename
dalam hal ini.Anda juga dapat melihat kapan baris kode tertentu di dalam file diubah
git blame filename
. Ini akan mencetak id komit pendek, penulis, cap waktu, dan baris kode lengkap untuk setiap baris dalam file. Ini sangat berguna setelah Anda menemukan bug dan Anda ingin tahu kapan bug itu diperkenalkan (atau siapa kesalahannya).sumber
filename
bukan opsional dalam perintahgit blame filename
.Pengguna SourceTree
Jika Anda menggunakan SourceTree untuk memvisualisasikan repositori Anda (gratis dan cukup bagus), Anda dapat mengeklik kanan sebuah file dan memilih Log yang Dipilih
Tampilan (di bawah) jauh lebih ramah daripada gitk dan sebagian besar opsi lain tercantum. Sayangnya (saat ini) tidak ada cara mudah untuk meluncurkan tampilan ini dari baris perintah - CLI SourceTree saat ini hanya membuka repo.
sumber
Untuk menampilkan revisi dan penulis yang terakhir diubah setiap baris file:
atau jika Anda ingin menggunakan GUI yang disalahkan:
sumber
Ringkasan jawaban lain setelah membacanya dan bermain sedikit:
Perintah baris perintah yang biasa adalah
Tetapi Anda juga bisa menggunakan gitk (gui) atau tig (text-ui) untuk memberikan cara yang lebih mudah dibaca untuk melihatnya.
Di bawah debian / ubuntu, perintah instal untuk alat-alat bagus ini seperti yang diharapkan:
Dan saya sedang menggunakan:
sehingga saya bisa mengetik
gdf dir
untuk mendapatkan sejarah yang terfokus dari segala sesuatu di subdirektoridir
.sumber
--all
adalah untuk semua cabang, sisanya dijelaskan dalam jawaban @ DanTambahkan alias ini ke .gitconfig Anda:
Dan gunakan perintah seperti ini:
Outputnya akan terlihat hampir sama persis dengan output gitk. Nikmati.
sumber
git lg -p filename
- itu mengembalikan diff indah dari file yang dicari.Akhir-akhir ini saya menemukan
tig
dan menemukannya sangat berguna. Ada beberapa kasus saya berharap itu A atau B tetapi sebagian besar waktu itu agak rapi.Untuk kasus Anda,
tig <filename>
mungkin apa yang Anda cari.http://jonas.nitro.dk/tig/
sumber
Anda dapat menggunakan vscode dengan GitLens , ini adalah alat yang sangat kuat. Setelah menginstal GitLens, buka tab GitLens, pilih
FILE HISTORY
dan Anda dapat menjelajahinya.sumber
Saya menulis git-playback untuk tujuan yang tepat ini
Ini memiliki manfaat baik menampilkan hasil di baris perintah (seperti
git log -p
) sambil juga membiarkan Anda melangkah melalui setiap komit menggunakan tombol panah (sepertigitk
).sumber
Atau:
gitx -- <path/to/filename>
jika Anda menggunakan gitx
sumber
Anda juga dapat mencoba ini yang mencantumkan komit yang telah mengubah bagian tertentu dari file (Diimplementasikan dalam Git 1.8.4).
Hasil yang dikembalikan adalah daftar commit yang memodifikasi bagian khusus ini. Perintah:
di mana upperLimit adalah start_line_number dan lowerLimit adalah ending_line_number file.
Lebih detail di https://www.techpurohit.com/list-some-useful-git-commands
sumber
Jika Anda ingin melihat seluruh sejarah file, termasuk di semua lain cabang menggunakan:
sumber
Dengan Ekstensi Git yang sangat baik , Anda pergi ke suatu titik dalam sejarah di mana file masih ada (jika sudah dihapus, jika tidak pergi ke HEAD), beralih ke
File tree
tab, klik kanan pada file dan pilihFile history
.Secara default, ini mengikuti file melalui penggantian nama, dan
Blame
tab memungkinkan untuk melihat nama pada revisi yang diberikan.Ini memiliki beberapa Gotcha kecil, seperti ditampilkan
fatal: Not a valid object name
diView
tab ketika mengklik revisi penghapusan, tapi saya bisa hidup dengan itu. :-)sumber
Jika Anda menggunakan git GUI (pada Windows) di bawah menu Repository, Anda dapat menggunakan "Visualisasikan master's History". Sorot komit di panel atas dan file di kanan bawah dan Anda akan melihat diff untuk komit di kiri bawah.
sumber
SmartGit :
sumber
Jawaban yang saya cari yang tidak ada di utas ini adalah melihat perubahan pada file yang saya komentari. yaitu
sumber
git diff origin/master
untuk menunjukkan perbedaan lengkap antara cabang lokal Anda dan cabang master (yang dapat diperbarui dari jarak jauh melaluigit fetch
)Jika Anda menggunakan TortoiseGit Anda harus dapat mengklik kanan pada file dan lakukan
TortoiseGit --> Show Log
. Di jendela yang muncul, pastikan:Show Whole Project
Opsi ' ' tidak dicentang.All Branches
Opsi ' ' dicentang.sumber
git diff -U <filename>
memberi Anda unified diff.Itu harus diwarnai merah dan hijau. Jika tidak, jalankan:
git config color.ui auto
pertama.sumber
Jika Anda menggunakan gerhana dengan plugin git, ia memiliki tampilan perbandingan yang sangat baik dengan riwayat. Klik kanan file dan pilih "bandingkan dengan" => "riwayat"
sumber
Saya mungkin tentang di mana OP saat ini dimulai, mencari sesuatu yang sederhana yang akan membiarkan saya menggunakan git difftool dengan vimdiff untuk meninjau perubahan pada file dalam repo saya mulai dari komit tertentu. Saya tidak terlalu senang dengan jawaban saya menemukan, jadi saya melemparkan ini git inc remental rep orter (gitincrep) naskah bersama-sama dan itu sudah berguna bagi saya:
Dipanggil tanpa argumen, ini akan dimulai dari awal sejarah repo, jika tidak akan dimulai dengan hash komit singkat apa pun yang Anda berikan dan lanjutkan ke saat ini - Anda dapat ctrl-C kapan saja untuk keluar. Setiap argumen setelah argumen pertama akan membatasi laporan perbedaan hanya untuk menyertakan file yang terdaftar di antara argumen tersebut (yang menurut saya adalah yang diinginkan OP, dan saya akan merekomendasikan untuk semua proyek kecil kecuali). Jika Anda memeriksa perubahan pada file tertentu dan ingin memulai dari awal, Anda harus memberikan string kosong untuk arg1. Jika Anda bukan pengguna vim, Anda dapat mengganti vimdiff dengan alat dif favorit Anda.
Behavior adalah untuk menghasilkan komit komentar ketika perubahan yang relevan ditemukan dan mulai menawarkan vimdiff berjalan untuk setiap file yang diubah (itu adalah perilaku git difftool , tetapi berfungsi di sini).
Pendekatan ini mungkin cukup naif, tetapi melihat melalui banyak solusi di sini dan di pos terkait, banyak yang terlibat menginstal alat baru pada sistem di mana saya tidak memiliki akses admin, dengan antarmuka yang memiliki kurva belajar mereka sendiri. Script di atas melakukan apa yang saya inginkan tanpa berurusan dengan semua itu. Saya akan melihat banyak saran bagus di sini ketika saya membutuhkan sesuatu yang lebih canggih - tetapi saya pikir ini langsung responsif terhadap OP.
sumber
Saya telah menemukan solusi yang sangat sederhana untuk dengan cepat menemukan riwayat file.
Itu akan menunjukkan sejarah semua komitmen.
sumber