Saya telah mengganti nama beberapa file menggunakan git mv
, used git stash
, melihat sekilas HEAD (tanpa mengubahnya) lalu melakukannya git stash pop
untuk mendapatkan semuanya kembali. Perpindahan saya telah menghilang dari daftar komit, jadi saya mengulanginya git rm
dan pesan komit mengklaim bahwa git telah melihat penggantian nama adalah ganti nama. Jadi saya tidak memikirkannya lagi.
Tapi sekarang, pasca-komit, saya tidak bisa melihat riwayat file yang dipindahkan! Inilah yang dikatakan git tentang komit yang dimaksud:
~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.h
delete mode 100644 test/R_DebugUI_iOS.m
create mode 100644 system/runtime/src/R_DebugUI_iOS.h
create mode 100644 system/runtime/src/R_DebugUI_iOS.m
<<snip older commits>>
~/projects%
Sekarang saya mencoba mendapatkan riwayat dari salah satu file yang dipindahkan ini, sehingga saya dapat melihat versi lama, tetapi saya tidak mendapatkan sesuatu yang sangat berguna:
~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
~/projects/system/runtime/src%
(Saya juga mencobanya tanpa -M
, -C
dan --find-copies-harder
, tetapi tidak berhasil.)
Saya bisa mendapatkan sejarahnya dengan nama lamanya, yang berhenti pada titik itu dihapus dari lokasi lamanya:
~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.m
commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date: Tue Dec 7 23:52:51 2010 +0000
Can set debug UI's alpha.
<<snip older commits>>
~/projects%
Jadi saya tidak sepenuhnya terjebak kali ini, tetapi saya tidak akan suka melakukan hal semacam ini sepanjang waktu. (Saya mengantisipasi memiliki cukup banyak file yang akan dipindahkan setidaknya sekali dalam hidup mereka.)
Apakah saya melakukan sesuatu yang salah? Salinan lama file dan salinan baru 98,8% sama (2 baris dari 166 diubah). Pemahaman saya adalah bahwa git harus dapat melacak file dalam kasus ini, karena ini menyimpulkan operasi ganti nama daripada menyimpannya secara eksplisit, dan file tersebut cukup mirip sehingga saya yakin harus menganggapnya sama.
Apakah ada yang bisa saya lakukan untuk memperbaikinya?
Jawaban:
Silakan coba
git log --follow
pada file Anda. Saya belajar dari sini Apakah mungkin untuk memindahkan / mengganti nama file di git dan mempertahankan riwayatnya?sumber
fatal: ambiguous argument 'file.txt': unknown revision or path not in the working tree
, coba git log --followYah, saya melihat penggantian nama saya dengan
git log -M --summary
..sumber
git log -M --summary
tidak memberikan informasi penggantian nama jika Anda hanya melihat riwayat dari beberapa file yang diberikan, yaitu dengan argumen file.Menjawab pertanyaan saya sendiri, karena saya telah berhasil meredakan kekhawatiran saya, meskipun saya belum menyelesaikan masalah saya dengan tepat. (Namun,
git log --follow
tetap tidak berhasil untuk saya.)Pertama,
--summary
log untuk perubahan nama komit menyertakandelete
baris dengan nama lama file. Jadi jika mudah dikenali, Anda bisa menemukan nama lamanya dangit log
dari sana.Jika itu bagian dari beberapa komit besar, dan karena itu sedikit lebih sulit untuk dikenali - dan situasi ini adalah salah satu kekhawatiran saya -
git blame -C
dapat digunakan dengan nama baru file pada revisi pasca-ganti nama pertama. Agaknya garis tetap dari file aslinya! - jadi git harus menemukan sumbernya, dan menampilkan nama file lama (dan hash komit untuk ukuran yang baik). Anda kemudian dapat melanjutkan perjalanan dengangit log
.Jadi, jika Anda memiliki minat pada sejarah file sebagai unit (untuk alasan apa pun) maka sepertinya itu dapat dilakukan dengan relatif mudah. Meskipun saya mendapat kesan git lebih suka Anda menggunakannya dengan benar.
sumber
git log --follow .
mana direktori kerja adalah lokasi baru tidak berfungsi, sementaragit log --follow path/to/new/dir
, dijalankan dari direktori induk umum dari lokasi lama dan baru, berfungsi--follow
parameter tidak bekerja, tetapi Anda perlu melakukan:git log --follow -- ./path/to/file
git -log filename.cs
berhenti pada komit gerakan file (dir saat ini diatur ke folder file). Namun jendela riwayat VS menunjukkan seluruh log perubahan file. Saya juga dapat melihat file tersebut telah dipindahkan dengan desktop Github. Tapigit log -10 --follow filename.cs
menunjukkan log sebelum pindah komit juga.Saya yakin inilah yang Anda cari.
sumber