Saya telah membuat serangkaian commit di Git dan saya menyadari sekarang bahwa saya lupa mengatur nama pengguna dan properti email pengguna dengan benar (mesin baru). Saya belum mendorong komit ini ke repositori saya, jadi bagaimana saya bisa memperbaiki komit ini sebelum melakukannya (hanya 3 komit terbaru di cabang master)?
Saya telah melihat git reset
dan git commit -C <id> --reset-author
, tetapi saya tidak berpikir saya berada di jalur yang benar.
git
git-commit
git-rewrite-history
pauldoo
sumber
sumber
remote: error: GH007: Your push would publish a private email address.
... `! master [ditolak jauh] -> master (push ditolak karena batasan privasi email) `.Jawaban:
Rebase / ubah tampaknya tidak efisien, ketika Anda memiliki kekuatan cabang-filter di ujung jari Anda:
(berpisah lintas garis untuk kejelasan, tetapi tidak perlu)
Pastikan untuk memeriksa hasilnya ketika Anda selesai, untuk memastikan bahwa Anda tidak mengubah apa pun yang Anda tidak bermaksud!
sumber
git filter-branch --help
cukup mudah :)--tag-name-filter cat
kefilter-branch
dalam rangka untuk tag bermigrasi ke sejarah baru. Ini juga menggunakan--branches --tags
alih-alih--all
, yang hanya menulis ulang riwayat cabang dan tag dan meninggalkan lainnyarefs
sendiri (meskipun itu mungkin tidak membuat banyak perbedaan kecuali misalnya Anda menggunakangit-notes
)-- --all
denganHEAD~1..HEAD
git log HEAD~2..HEAD
?Pendekatan rebase interaktif cukup bagus ketika digunakan bersama dengan exec. Anda dapat menjalankan perintah shell apa pun terhadap komit tertentu atau semua komit dalam rebase.
Pertama atur pengaturan git author Anda
Kemudian untuk mengatur ulang penulis untuk semua komit setelah SHA yang diberikan
Ini akan memunculkan editor Anda untuk mengonfirmasi perubahan. Yang perlu Anda lakukan di sini adalah menyimpan dan keluar dan itu akan melalui setiap komit dan menjalankan perintah yang ditentukan dalam flag -x.
Per komentar Dave @ di bawah ini, Anda juga dapat mengubah penulis sambil mempertahankan stempel waktu asli dengan:
sumber
filter-branch
jika Anda hanya ingin memperbaiki komit terakhir Anda :). Namun perlu dicatat, bahwa ini mengubah cap waktu komit.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
git log
juga menunjukkan kepengarangan lama untuk saya, tetapi status git dengan benar mengidentifikasi komitmen baru dan setelah dipaksa, mereka seperti yang saya maksudkan.git rebase -i --root …
alih-alih melewati SHA.Untuk mengubah penulis hanya untuk komit terakhir:
Misalkan Anda hanya ingin mengubah penulis untuk komit N terakhir:
CATATAN
--no-edit
merek bendera yakingit commit --amend
tidak meminta konfirmasi tambahangit rebase -i
, Anda dapat secara manual memilih komit tempat untuk mengubah penulis,file yang Anda edit akan terlihat seperti ini:
sumber
--rebase-merges
(pendek-r
), untuk menjaga topologi cabang Anda tetap utuh jika mengandung beberapa penggabungan.Ini metode didokumentasikan oleh github untuk tujuan ini. Langkah-langkahnya adalah:
OLD_EMAIL
,CORRECT_EMAIL
, danCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
dan Anda selesai!sumber
Saya percaya apa yang Anda cari
git rebase --interactive
Ini memungkinkan Anda untuk mereset ke komit tertentu dan kemudian melempar riwayat yang mengubah penambahan atau pengelompokan komit
Di sini Anda memiliki penjelasan https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -teraktif
sumber
Jika Anda merasa tidak aman untuk merendahkan dan mengubah, Anda bisa melakukannya dengan cara ini. Pada saat yang sama Anda juga akan menyetel konfigurasi global yang mungkin ingin Anda lakukan.
git reset HEAD~
(batalkan komit terakhir)git config --global user.name "Your Name"
git config --global user.email [email protected]
git commit -m "message"
sumber