Untuk perubahan yang disembunyikan dalam gabungan komitmen
Menggabungkan komit secara otomatis menyembunyikan perubahannya dari output log Git. Baik beliung dan sebaliknya-menyalahkan tidak menemukan perubahan. Jadi baris yang saya inginkan telah ditambahkan dan kemudian dihapus dan saya ingin menemukan gabungan yang menghapusnya. git log -p -- path/file
Riwayat file hanya menunjukkan itu ditambahkan. Inilah cara terbaik yang saya temukan untuk menemukannya:
git log -p -U9999 -- path/file
Cari perubahannya, lalu cari mundur untuk "^ commit" - yang pertama "^ commit" adalah komit di mana file terakhir memiliki baris itu. "^ Commit" kedua adalah setelah menghilang. Komit kedua mungkin adalah yang menghapusnya. Ini -U9999
dimaksudkan untuk menampilkan seluruh isi file (setelah setiap kali file diubah), dengan asumsi file Anda semuanya maks 9999 baris.
Menemukan gabungan yang terkait melalui brute force (bedakan setiap kemungkinan gabungan komit dengan induk pertamanya, jalankan terhadap ton komit)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(Saya mencoba membatasi filter revisi lebih banyak, tetapi saya mengalami masalah dan tidak merekomendasikan ini. Perubahan penambahan / penghapusan yang saya cari ada di cabang berbeda yang digabung pada waktu yang berbeda dan A ... B tidak termasuk ketika perubahan benar-benar digabungkan ke dalam arus utama.)
Perlihatkan pohon Git dengan dua komit ini (dan banyak riwayat kompleks Git dihapus):
git log --graph --oneline A B ^$(git merge-base A B)
(A adalah komit pertama di atas, B adalah komit kedua di atas)
Tampilkan riwayat A dan riwayat B minus sejarah A dan B.
Versi alternatif (tampaknya menunjukkan jalur lebih linier daripada pohon riwayat Git biasa - namun saya lebih suka pohon riwayat git biasa):
git log --graph --oneline A...B
Tiga, bukan dua titik - tiga titik berarti "r1 r2 - tidak $ (git merge-base --all r1 r2). Ini adalah himpunan komit yang dapat dijangkau dari salah satu dari r1 (sisi kiri) atau r2 (kanan sisi), tetapi tidak dari keduanya. " - sumber: "man gitrevisions"
git log -S<string> /path/to/file
ingin-c
atau-cc
juga menunjukkan penghapusan selama penggabungan (konflik)