Pertanyaan Lihat riwayat perubahan file menggunakan versi Git


Bagaimana saya bisa melihat riwayat perubahan dari file individu di Git, detail lengkap dengan apa yang telah berubah?

Saya sudah mendapat sejauh:

git log -- [filename]

yang menunjukkan kepada saya sejarah commit file, tetapi bagaimana saya mendapatkan konten dari setiap perubahan file?

Saya sedang mencoba melakukan transisi dari MS SourceSafe dan yang dulu sederhana right-click → show history.


2502
2017-11-10 15:42


asal


Jawaban:


Untuk ini saya akan menggunakan:

gitk [filename]

atau mengikuti nama file lalu mengganti nama

gitk --follow [filename]

1947
2017-08-24 12:05



Kamu dapat memakai

git log -p filename

untuk membiarkan git menghasilkan tambalan untuk setiap entri log.

Lihat

git help log

untuk opsi lainnya - sebenarnya dapat melakukan banyak hal yang menyenangkan :) Untuk mendapatkan hanya diff untuk komitmen tertentu, Anda dapat melakukannya

git show HEAD 

atau revisi lainnya oleh pengenal. Atau gunakan

gitk

untuk menelusuri perubahan secara visual.


1832
2017-11-10 15:56



git log --follow -p -- file

Ini akan menunjukkan seluruh riwayat file (termasuk riwayat di luar mengganti nama dan dengan diff untuk setiap perubahan).

Dengan kata lain, jika file bernama bar pernah disebut foo, kemudian git log -p bar (tanpa --follow opsi) hanya akan menampilkan riwayat file hingga titik di mana namanya diubah - tidak akan menampilkan riwayat file saat itu dikenal sebagai foo. Menggunakan git log --follow -p bar akan menampilkan seluruh sejarah file, termasuk setiap perubahan pada file ketika itu dikenal sebagai foo. Itu -p pilihan memastikan bahwa diff dimasukkan untuk setiap perubahan.


1184
2018-03-30 23:25



Jika Anda lebih memilih untuk tetap berbasis teks, Anda mungkin ingin menggunakannya cekcok.

Instal Cepat:

  • apt-get: # apt-get install tig 
  • Homebrew (OS X): $ brew install tig

Gunakan ini untuk melihat sejarah pada satu file: tig [filename]
Atau telusuri riwayat repo terperinci: tig

Mirip dengan gitk tetapi berbasis teks. Mendukung warna di terminal!


146
2018-06-07 10:23



git whatchanged -p filename juga setara dengan git log -p filename pada kasus ini.

Anda juga dapat melihat kapan baris kode tertentu di dalam file diubah git blame filename. Ini akan mencetak id komit pendek, penulis, timestamp, dan baris lengkap kode untuk setiap baris dalam file. Ini sangat berguna setelah Anda menemukan bug dan Anda ingin tahu kapan ia diperkenalkan (atau kesalahan siapa itu).


101
2017-11-11 06:12



Pengguna SourceTree

Jika Anda menggunakan SourceTree untuk memvisualisasikan repositori Anda (gratis dan cukup bagus) Anda dapat mengklik kanan file dan memilih Log Terpilih

enter image description here

Tampilan (di bawah) jauh lebih ramah daripada gitk dan sebagian besar opsi lain yang tercantum. Sayangnya (saat ini) tidak ada cara mudah untuk meluncurkan pandangan ini dari baris perintah - CLI SourceTree saat ini baru saja membuka repo.

enter image description here


91
2017-07-30 18:55



Untuk menunjukkan apa revisi dan pengarang terakhir memodifikasi setiap baris file:

git blame filename

atau jika Anda ingin menggunakan GUI kesalahan yang kuat:

git gui blame filename

56
2017-08-11 13:01



Rangkuman jawaban lain setelah membacanya dan bermain sedikit:

Perintah baris perintah yang biasa

git log --follow --all -p dir/file.c

Tetapi Anda juga dapat menggunakan gitk (gui) atau tig (text-ui) untuk memberikan lebih banyak cara yang dapat dibaca manusia untuk melihatnya.

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

Di bawah debian / ubuntu, perintah install untuk alat-alat yang indah ini adalah seperti yang diharapkan:

sudo apt-get install gitk tig

Dan saat ini saya menggunakan:

alias gdf='gitk --follow --all -p'

jadi saya bisa mengetik gdf dir untuk mendapatkan sejarah yang terfokus pada semuanya di subdirektori dir.


39
2017-12-05 18:38



Tambahkan alias ini ke .gitconfig Anda:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

Dan gunakan perintah seperti ini:

> git lg
> git lg -- filename

Outputnya akan terlihat hampir persis sama dengan output gitk. Nikmati.


22
2018-06-26 20:12