Saya ingin mengubah penulis dari satu komit tertentu dalam sejarah. Itu bukan komitmen terakhir.
Saya tahu tentang pertanyaan ini - Bagaimana cara mengubah penulis komit di git?
Tetapi saya sedang memikirkan sesuatu, di mana saya mengidentifikasi komit dengan hash atau short-hash.
git
git-commit
MicTech
sumber
sumber
Jawaban:
Rebase interaktif dari suatu titik lebih awal dalam sejarah daripada komit yang perlu Anda modifikasi (
git rebase -i <earliercommit>
). Dalam daftar komit yang ditata ulang, ubah teks daripick
menjadi diedit
sebelah hash yang ingin Anda modifikasi. Kemudian ketika git meminta Anda untuk mengubah komit, gunakan ini:Misalnya, jika sejarah commit Anda adalah
A-B-C-D-E-F
denganF
sebagaiHEAD
, dan Anda ingin mengubah penulisC
danD
, maka Anda akan ...git rebase -i B
(di sini adalah contoh dari apa yang akan Anda lihat setelah menjalankangit rebase -i B
perintah )A
, gunakangit rebase -i --root
C
danD
daripick
menjadiedit
:wq
).C
git commit --amend --author="Author Name <[email protected]>"
git rebase --continue
D
git commit --amend --author="Author Name <[email protected]>"
lagigit rebase --continue
git push -f
untuk memperbarui asal Anda dengan komitmen yang diperbarui.sumber
git rebase -i <commit>
vim
. Untuk menyimpan dan keluar, ketik Esc: wq Enter. Di sisi lain, jika itu Nano dan Anda melihat hal-hal seperti "WriteOut: ^ O" di bagian bawah, maka Anda harus menggunakan Ctrl + O, Enter, Ctrl + X sebagai gantinya.--no-edit
opsi.git commit --amend --reset-author --no-edit
tidak akan membuka editor. Tersedia sejak git 1.7.9.git rebase -i --root
The jawaban yang diterima untuk pertanyaan ini adalah penggunaan mengagumkan pandai rebase interaktif, tetapi sayangnya menunjukkan konflik jika komit kita berusaha untuk mengubah penulis digunakan untuk berada di cabang yang kemudian digabung dalam. Lebih umum, itu tidak bekerja saat menangani sejarah yang berantakan.
Karena saya khawatir menjalankan skrip yang bergantung pada pengaturan dan variabel lingkungan yang tidak disetel untuk menulis ulang sejarah git, saya menulis jawaban baru berdasarkan posting ini yang mirip dengan jawaban ini tetapi lebih lengkap.
Berikut ini diuji dan berfungsi, tidak seperti jawaban yang ditautkan. Asumsikan untuk kejelasan eksposisi yang
03f482d6
merupakan komit yang penulisnya kami coba ganti, dan42627abe
komit dengan penulis baru.Lihat komit yang kami coba modifikasi.
Buat pengarangnya berubah.
Sekarang kita memiliki komitmen baru dengan hash yang diasumsikan
42627abe
.Periksa cabang asli.
Ganti komit lama dengan yang baru secara lokal.
Tulis ulang semua komitmen di masa mendatang berdasarkan penggantian.
Lepaskan penggantian untuk kebersihan.
Dorong riwayat baru (hanya gunakan - memaksa jika di bawah gagal, dan hanya setelah kewarasan memeriksa dengan
git log
dan / ataugit diff
).Alih-alih 4-6 Anda hanya dapat rebase ke komit baru:
sumber
git rebase -i
. Belum pernah mendengargit replace
hal ini sebelumnya. +1--force-with-lease
bukan-f
. Lebih aman.git filter-branch -- --all
mengubah komit di semua cabang tempat komit asli berada. Jika Anda tidak memiliki cukup kredensial (atau Anda tidak ingin mengubah riwayat cabang lain), sebaiknya berhati-hati dengan jawaban ini.Dokumentasi Github berisi skrip yang menggantikan info committer untuk semua komit di cabang .
Jalankan skrip berikut dari terminal setelah mengubah nilai variabel
Dorong riwayat yang diperbaiki ke GitHub:
ATAU jika Anda ingin mendorong referensi yang dipilih dari cabang kemudian gunakan
sumber
clone
/push
, Anda akan berakhir dengan namespace cadanganrefs/original/
. Saya tidak dapat menemukan cara untuk menghapus namespace ini dengan cerdas, jadi saya akhirnya menghapus direktori.git/refs/original
, yang berhasil.git push -f
memaksakan perubahan pada repo.Setel ulang email Anda ke konfigurasi secara global:
git config --global user.email [email protected]
Sekarang atur ulang pembuat komit Anda tanpa mengedit:
git commit --amend --reset-author --no-edit
sumber
It's not last commit.
Jadi bagaimana merekaamend
melakukannya?git reset HEAD~
, jalankan baris yang disarankan, lalu lakukan komit berikutnya secara manual lagi. Bekerja dengan baik!git config --local user.name FirstName LastName
dangit config --local user.email [email protected]
. Kemudian gunakan enam komitmen terakhir menggunakangit rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6
. Akhirnya dorong ke repo Git menggunakan remotegit push --force-with-lease
.Anda dapat mengubah pembuat komit terakhir menggunakan perintah di bawah ini.
git commit --amend --author="Author Name <[email protected]>"
Namun, jika Anda ingin mengubah lebih dari satu komit nama, itu agak rumit. Anda perlu memulai rebase interaktif lalu tandai komit sebagai edit lalu ubah satu per satu dan selesaikan.
Mulai rebasing dengan
git rebase -i
. Ini akan menunjukkan kepada Anda sesuatu seperti ini.Ubah
pick
kata kunci menjadiedit
untuk komit yang ingin Anda ubah nama pembuatnya.Kemudian tutup editor. Untuk pemula, tekan
Escape
lalu ketik:wq
dan tekanEnter
.Maka Anda akan melihat terminal Anda seperti tidak ada yang terjadi. Sebenarnya Anda berada di tengah-tengah rebase interaktif. Sekarang saatnya untuk mengubah nama penulis komit Anda menggunakan perintah di atas. Ini akan membuka editor lagi. Berhenti dan lanjutkan rebase dengan
git rebase --continue
. Ulangi hal yang sama untuk jumlah komit yang ingin Anda edit. Anda dapat memastikan bahwa rebase interaktif selesai ketika Anda menerimaNo rebase in progress?
pesan.sumber
pick
tindakan, dan menambahkan setelah setiap barisexec git commit --no-edit --amend --author="MyNewAuthor <[email protected]>"
Jawaban dalam pertanyaan yang Anda tautkan adalah jawaban yang baik dan mencakup situasi Anda (pertanyaan lainnya lebih umum karena melibatkan penulisan ulang banyak komit).
Sebagai alasan untuk mencoba
git filter-branch
, saya menulis naskah untuk menulis ulang Nama Penulis dan / atau Email Penulis untuk komit yang diberikan:sumber
Berkomitmen sebelumnya:
Untuk memperbaiki penulis untuk semua komit, Anda dapat menerapkan perintah dari jawaban @ Amber:
Atau untuk menggunakan kembali nama dan email Anda, Anda bisa menulis:
Komit setelah perintah:
Misalnya untuk mengubah semua mulai dari
4025621
:Anda harus menjalankan:
Catatan: Untuk menyertakan penulis yang berisi spasi seperti nama dan alamat email, penulis harus dikelilingi oleh tanda kutip. Sebagai contoh:
atau tambahkan alias ini ke
~/.gitconfig
:Dan kemudian jalankan:
sumber
git shortlog -e -s
.Ada satu langkah tambahan untuk jawaban Amber jika Anda menggunakan repositori terpusat:
git push -f
untuk memaksa pembaruan repositori pusat.Berhati-hatilah karena tidak banyak orang yang bekerja di cabang yang sama karena dapat merusak konsistensi.
sumber
Ketika melakukan
git rebase -i
ada sedikit yang menarik di doc:A-B-C-D-E-F
,B
danD
(= 2 komit),maka kamu bisa melakukan:
git config user.name "Correct new name"
git config user.email "[email protected]"
git commit --allow-empty -m "empty"
git rebase -i B^
B^
memilih induk dariB
.pick
menjadisquash
untuk itu.Contoh apa yang
git rebase -i B^
akan memberi Anda:ubah itu menjadi:
Ini akan meminta Anda untuk mengedit pesan:
dan Anda bisa menghapus beberapa baris pertama.
sumber
Sebagai tanggapan Eugen Konkov , untuk memulai dari root commit, gunakan
--root
flag. The--no-edit
bendera membantu jugasumber
Temukan cara yang dapat mengubah pengguna dengan cepat dan tidak memiliki efek samping terhadap komitmen orang lain.
Cara sederhana dan jelas:
operasi terperinci
refs/heads/master.
sumber
Jika komit yang ingin Anda ubah bukan komit terakhir, ikuti langkah-langkah di bawah ini. Jika komit Anda berada di cabang yang berbeda maka pertama-tama beralihlah ke cabang itu.
git checkout branch_name
Temukan komit sebelum komit yang ingin Anda ubah dan temukan hash-nya. Kemudian keluarkan perintah rebase.
git rebase -i -p hash of commit
Kemudian editor akan membuka dan memasukkan 'edit' untuk komit yang ingin Anda ubah. Tinggalkan yang lain dengan opsi 'pilih' default. Setelah diubah masukkan kunci 'esc' dan wq! untuk keluar.
Kemudian keluarkan perintah git commit dengan opsi amandemen.
git commit --amend --author = "Email nama pengguna" --tidak diedit
Kemudian keluarkan perintah berikut.
git rebase --continue
Setelah komit diperbarui di repositori lokal, dorong perubahan ke repositori jarak jauh.
sumber
Ada juga pendekatan malas untuk masalah ini, terutama jika Anda memiliki lebih dari satu komit yang ingin Anda ubah. Dalam kasus saya, saya memiliki cabang baru dengan beberapa komitmen dengan penulis yang salah, jadi apa yang membantu saya:
Buka cabang asli Anda:
Buat cabang baru darinya:
Gabungkan tanpa komit info sebagai komit:
Anda mungkin juga ingin melakukan perubahan:
Ubah nama penulis dan lakukan perubahan:
Dan hanya itu, Anda dapat mendorong perubahan.
Anda dapat menghapus cabang dengan penulis yang salah setelah itu.
sumber
Langkah-langkah untuk mengubah nama penulis setelah komit didorong
git rebase i HEAD ~ 10 (10 adalah total komit untuk ditampilkan pada rebase)
If you Get anything like below
fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.
Kemudian ketik "git rebase --continue" atau "git rebase --abort" sesuai kebutuhan Anda
pick 897fe9e simplify code a little
pick abb60f9 add new feature
pick dc18f70 bugfix
Sekarang Anda perlu menambahkan perintah di bawah ini tepat di bawah komit yang ingin Anda edit, seperti di bawah ini
pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <[email protected]>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <[email protected]>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <[email protected]>'
Itu saja, sekarang cukup tekan ESC,: wq dan Anda sudah siap
Kemudian git push origin HEAD: BRANCH NAME -f [tolong jaga -f Force push]
suka
git push -f
ataugit push origin HEAD: dev -f
sumber
git push
perintah?Mengubah Nama Pengirim Anda & Email Secara Global:
Mengubah Nama Pengirim Anda & Email per Repositori:
Mengubah Informasi Penulis Hanya Untuk Komit Berikutnya:
Petunjuk : Untuk situasi lain dan baca informasi lebih lanjut baca referensi posting .
sumber
Jika yang perlu Anda ubah adalah PENULIS TERAKHIR komit dan tidak ada yang lain menggunakan repositori Anda, Anda dapat membatalkan komit terakhir Anda dengan:
ubah nama pembuat komit Anda dengan:
Keluar dari editor yang terbuka dan tekan lagi kode Anda:
sumber
Untuk pesan gabungan, saya menemukan bahwa saya tidak dapat mengubahnya dengan menggunakan
rebase
, setidaknya pada gitlab. Ini menunjukkan gabungan sebagai komit tapi saya tidak bisa rebase ke # sha itu. Saya menemukan ini posting membantu.Tiga baris kode ini melakukan pekerjaan untuk mengubah pesan commit gabungan (seperti penulis).
sumber
Anda dapat menggunakan perintah ini dari halaman resmi github
https://help.github.com/en/github/using-git/changing-author-info
ini dia perintahnya
di sini Anda dapat mengubah email lama menjadi nama pengguna dan alamat email baru Anda.
sumber