Saya pernah membaca bahwa ketika mengganti nama file di git , Anda harus melakukan perubahan apa pun, melakukan penggantian nama, lalu memformat file yang diubah namanya. Git akan mengenali file dari konten, daripada melihatnya sebagai file baru yang tidak terlacak, dan menyimpan sejarah perubahan.
Namun, melakukan hal ini malam ini akhirnya saya kembalikan git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Ganti nama stylesheet saya di Finder dari iphone.css
menjadimobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
Jadi git sekarang berpikir saya sudah menghapus satu file CSS, dan menambahkan yang baru. Bukan yang saya inginkan, mari batalkan ganti nama dan biarkan git melakukan pekerjaan.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Kembali ke tempat saya mulai.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Mari kita gunakan git mv
saja.
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
Sepertinya kita baik-baik saja. Jadi mengapa git tidak mengenali nama baru pertama kali ketika saya menggunakan Finder?
git mv old new
secara otomatis memperbarui indeks. Ketika Anda mengganti nama di luar Git, Anda harus melakukan git add new
dan git rm old
melakukan perubahan pada indeks. Setelah selesai, ini git status
akan berfungsi seperti yang Anda harapkan.
public_html
dir, yang dilacak di git. Setelah dilakukan git add .
dan git commit
, masih menunjukkan banyak file 'dihapus' di git status
. Saya melakukan git commit -a
dan penghapusan dilakukan tetapi sekarang saya tidak memiliki riwayat pada file yang hidup public_html
sekarang. Alur kerja ini tidak semulus yang saya inginkan.
add+rm
ataumv
- menghasilkan hasil yang sama. Git kemudian menggunakan rename / copy detection untuk memberi tahu Anda bahwa itu adalah rename. Sumber yang Anda kutip juga tidak akurat. Tidak masalah apakah Anda memodifikasi + mengganti nama di komit yang sama atau tidak. Ketika Anda melakukan diff di kedua modifikasi dan ganti nama, deteksi ganti nama akan melihatnya sebagai perubahan nama + modifikasi, atau jika modifikasi adalah penulisan ulang total, itu akan ditampilkan sebagai ditambahkan dan dihapus - masih tidak peduli bagaimana Anda melakukan Itu.