Temukan semua cabang yang berisi perubahan ke FILENAME (bahkan jika sebelum titik cabang (tidak tercatat))
FILENAME="<filename>"
git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u
Periksa secara manual:
gitk --all --date-order -- $FILENAME
Temukan semua perubahan pada FILENAME yang tidak digabungkan ke master:
git for-each-ref --format="%(refname:short)" refs/heads | grep -v master | while read br; do git cherry master $br | while read x h; do if [ "`git log -n 1 --format=%H $h -- $FILENAME`" = "$h" ]; then echo $br; fi; done; done | sort -u
git log -Schange …
ataugit log --grep LOGMESSAGE …
(dengan ... mewakili sisa perintah yang saya sebutkan).gitk --all -- filename
yang secara grafis akan menampilkan semua perubahan pada file itu. Jika Anda dapat mengidentifikasi komit yang dipermasalahkan, Anda dapat menggunakangit branch --contains
untuk melihat ke cabang mana komit telah dimigrasi. Jika Anda ingin melihat di cabang mana komit yang dipermasalahkan awalnya dibuat, maka google git-what-branch, tetapi ketahuilah bahwa penggabungan maju cepat dapat mengaburkan informasi itu.git log --all --format='--contains %H' "$file" | xargs git branch
Yang kamu butuhkan adalah
Jika Anda ingin segera mengetahui cabangnya, Anda juga dapat menggunakan:
Selanjutnya, jika Anda memiliki nama baru, Anda mungkin ingin memasukkan
--follow
perintah log Git.sumber
--source
di sana dan Anda emas.Sepertinya ini masih menjadi masalah tanpa solusi yang tepat. Saya tidak memiliki cukup kredit untuk dikomentari, jadi inilah kontribusi kecil saya.
Solusi pertama Seth Robertson agak berhasil untuk saya, tetapi hanya memberi saya cabang lokal, di antaranya banyak positif palsu, mungkin karena penggabungan dari cabang stabil.
Solusi kedua Adam Dymitruk sama sekali tidak berhasil untuk saya. Sebagai permulaan, apa --format =% 5? Itu tidak dikenali oleh git, saya tidak dapat menemukan apa pun tentangnya dan saya tidak dapat membuatnya berfungsi dengan opsi format lain.
Tetapi solusi pertamanya yang dikombinasikan dengan opsi --source dan dengan grep sederhana terbukti membantu:
Ini memberi saya sejumlah tag dan cabang jarak jauh dan satu cabang lokal, tempat saya membuat perubahan terbaru pada file. Tidak yakin seberapa lengkapnya ini.
UPDATE sesuai permintaan @nealmcb, menyortir cabang berdasarkan perubahan terbaru:
Pertama, Anda dapat mengubah grep menjadi "refs / heads /.*", yang akan memberi Anda cabang lokal saja. Jika hanya ada beberapa cabang, Anda dapat memeriksa komit terbaru dari masing-masing cabang seperti ini:
Jika ada lebih banyak cabang dan Anda benar-benar ingin mengotomatiskannya, Anda dapat menggabungkan dua perintah menggunakan xargs, git log formatting dan jenis lain ke dalam satu baris ini:
Ini akan menghasilkan keluaran seperti ini:
sumber
Saya tahu pertanyaan ini kuno, tetapi saya terus mengulanginya sebelum mengembangkan solusi saya sendiri. Saya merasa ini lebih elegan dan berkat penggunaan filter dasar gabungan dari cabang yang tidak diinginkan.
Jika Anda memasukkannya ke dalam PATH sebagai
git-find-changes
(dengan izin yang dapat dieksekusi) - Anda kemudian dapat memanggilnya dengangit find-changes /path
Contoh keluaran untuk
git find-changes app/models/
sumber
Berikut ini adalah metode kekerasan yang tidak elegan, tapi saya berharap itu akan berhasil. Pastikan Anda telah menyimpan perubahan yang belum terikat terlebih dahulu karena ini akan mengalihkan cabang mana yang saat ini Anda gunakan.
sumber
git log -S
for-each-ref
masih menghormatishort
bendera itu. Karena itu, abaikan jawaban saya; jawaban lain lebih baik.