Ketika saya mulai menggunakan git saya hanya melakukan git init
dan mulai menelepon add
dan commit
. Sekarang saya mulai memperhatikan dan saya dapat melihat bahwa komitmen saya muncul sebagai cowens@localmachine
, bukan alamat yang saya inginkan. Tampaknya pengaturan GIT_AUTHOR_EMAIL
dan GIT_COMMITTER_EMAIL
akan melakukan apa yang saya inginkan, tetapi saya masih memiliki komitmen lama dengan alamat / nama email yang salah. Bagaimana saya bisa memperbaiki komitmen lama?
76
git
untuk tujuan yang serupa dengan ini lebih baik ditanyakan pada Stack Overflow .Jawaban:
Anda dapat kembali dan memperbaiki semua komitmen Anda dengan satu panggilan ke git filter-branch. Ini memiliki efek yang sama dengan rebase, tetapi Anda hanya perlu melakukan satu perintah untuk memperbaiki semua riwayat Anda, alih-alih memperbaiki setiap komit secara individual.
Anda dapat memperbaiki semua email yang salah dengan perintah ini:
Informasi lebih lanjut tersedia dari git docs
sumber
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
Perintah cabang-filter Git sangat kuat, tetapi sangat sulit digunakan untuk hal-hal yang tidak sepele, seperti misalnya, jika Anda memiliki lebih dari satu penulis yang harus dikoreksi.
Inilah alternatif yang menurut saya berguna, yang menggunakan fitur .mailmap yang dijelaskan dalam halaman git-shortlog. Ini menyediakan mekanisme pemetaan penulis yang dapat kita gunakan dengan fasilitas pemformatan git log. Kita dapat menggunakannya untuk menghasilkan perintah untuk memilih dan mengubah mengubah urutan komit.
Sebagai contoh, misalkan Anda ingin memperbaiki kepengarangan pada cabang $ CABANG, mulai dari $ MULAI komit.
Anda perlu membuat file .mailmap di direktori teratas repositori Anda yang memetakan nama penulis yang sudah ada untuk mengoreksi. Anda bisa mendapatkan daftar nama penulis yang ada dengan:
Anda harus memiliki file .mailmap seperti ini (misalnya):
Sekarang Anda dapat menggunakan fitur pemformatan git log untuk menghasilkan perintah untuk menulis ulang $ BRANCH sebagai $ BRANCH2.
Perintah pertama membuat cabang kosong baru yang tumbuh dari komit $ MULAI. Untuk setiap komit antara $ MULAI dan kemudian akhir dari $ CABANG, perintah kedua cherry mengambil komit asli ke akhir cabang saat ini $ CABANG2, dan mengubah itu untuk mengatur penulis dengan benar.
Ini juga berlaku secara umum - letakkan ini di ~ / .gitconfig Anda:
Jadi ketika Anda perlu memperbaiki penulis, sekarang Anda hanya perlu menghasilkan .mapfile dan lakukan:
Ref cabang asli dapat dipindahkan ke yang baru, dan yang baru dihapus:
sumber
Menggabungkan jawaban dari Bagaimana cara memperbaiki metainformation pada komit pertama di git?
sumber
Untuk mengikuti jawaban jedberg: Anda dapat menggunakan
rebase -i
dan memilih untuk mengedit komit yang dimaksud. Jika Anda menggunakangit commit --amend --author <AUTHOR DETAILS>
dan kemudiangit rebase continue
Anda dapat melewati dan memperbaiki sejarah.sumber