Bagaimana cara mengubah pembuat komit untuk satu komit tertentu?

Saya ingin mengubah penulis komit tertentu dalam sejarah. Ini bukan komitmen terakhir.

Saya tahu tentang pertanyaan ini - bagaimana saya bisa mengubah pembuat komit di git?

Tetapi saya sedang memikirkan sesuatu di mana saya mengidentifikasi sebuah komit dengan hash atau hash pendek.

1564
15 июня '10 в 7:00 2010-06-15 07:00 MicTech menetapkan 15 Juni '10 pada 7:00 2010-06-15 07:00
@ 9 jawaban

Rebase interaktif dari suatu titik lebih awal dalam sejarah daripada komit yang perlu Anda ubah ( git rebase -i <earliercommit> ). Dalam daftar komit yang telah direstrukturisasi, ubah teks dari pick untuk edit sebelah hash yang ingin Anda ubah. Kemudian, ketika git meminta Anda untuk mengubah komit, gunakan ini:

 git commit --amend --author="Author Name <email@address.com>" 

Misalnya, jika ABCDE-f melakukan histori dengan F HEAD , dan Anda ingin mengubah pembuat C dan D , maka Anda akan ...

  1. Tentukan git rebase -i B ( inilah contoh apa yang akan Anda lihat setelah mengeksekusi perintah git rebase -i B )
    • jika Anda perlu mengedit A , gunakan git rebase -i --root
  2. ubah baris untuk C dan D dari pick ke edit
  3. Segera setelah rebase dimulai, dia akan berhenti di C
  4. Anda harus melakukan git commit --amend --author="Author Name <email@address.com>"
  5. Kemudian git rebase --continue
  6. Ini lagi akan berhenti di D
  7. Maka Anda harus lagi git commit --amend --author="Author Name <email@address.com>"
  8. git rebase --continue
  9. Relokasi akan selesai.
  10. Gunakan git push -f untuk memperbarui sumber Anda dengan komit yang diperbarui.
2672
15 июня '10 в 7:31 2010-06-15 07:31 jawabannya diberikan Amber 15 Juni 10 di 7:31 2010-06-15 07:31

Jawaban yang diterima untuk pertanyaan ini adalah penggunaan relokasi interaktif yang sangat pintar, tetapi sayangnya hal itu menyebabkan konflik, jika penulis yang kami coba ubah digunakan oleh penulis untuk cabang yang kemudian digabung. Dalam kasus yang lebih umum, ini tidak berfungsi saat memproses cerita kotor.

Karena saya takut menjalankan skrip yang bergantung pada pengaturan dan pengaturan u>posting ini, yang mirip dengan jawaban ini, tetapi lebih lengkap.

Berikut ini diuji dan berfungsi, berbeda dengan respons yang terkait. Misalkan untuk kejelasan, bahwa 03f482d6 adalah komit, penulis yang kami coba ganti, dan 42627abe adalah komit dengan penulis baru.

  1. Buat komitmen yang ingin kami ubah.

     git checkout 03f482d6 
  2. Buat pengarangnya berubah.

     git commit --amend --author "New Author Name <New Author Email>" 

    Sekarang kami memiliki komitmen baru dengan hash sama dengan 42627abe .

  3. Periksa cabang asli.

  4. Ganti komit lama dengan yang baru secara lokal.

     git replace 03f482d6 42627abe 
  5. Tulis u>

     git filter-branch -- --all 
  6. Hapus penggantian untuk kebersihan.

     git replace -d 03f482d6 
  7. Klik pada histori baru (gunakan saja - memaksa jika yang berikut gagal, dan hanya setelah menguji fungsionalitas dengan git log dan / atau git diff ).

     git push --force-with-lease 

Alih-alih 4-6, Anda cukup beralih ke komit baru:

 git rebase -i 42627abe 
369
04 марта '15 в 5:11 2015-03-04 05:11 jawabannya diberikan merlin2011 04 Maret '15 di 5:11 2015-03-04 05:11
09 июня '15 в 19:02 2015-06-09 19:02 Jawaban diberikan oleh olivieradam666 09 Juni '15 pada 19:02 2015-06-09 19:02
  • Setel u>

    git config --global user.email example@email.com

  • Sekarang atur u>

    git commit --amend --reset-author --no-edit

82
05 апр. jawabannya diberikan pravbeatle 05 Apr 2017-04-05 15:44 '17 pada 15:44 2017-04-05 15:44

Anda dapat mengubah pembuat komit terakhir menggunakan perintah di bawah ini.

git commit --amend --author="Author Name <email@address.com>"

Namun, jika Anda ingin mengubah lebih dari satu nama penulis, ini agak sulit. Anda perlu memulai instalasi u>

Mulai reboot dengan git rebase -i . Dia akan menunjukkan kepada Anda sesuatu seperti ini.

Ubah kata kunci pick untuk edit komit yang ingin Anda ubah nama pembuatnya.

Kemudian tutup editor. Untuk pemula, tekan Escape , lalu ketik :wq dan tekan Enter .

Maka Anda akan melihat terminal Anda seolah-olah tidak ada yang terjadi. Anda sebenarnya berada di tengah permutasi interaktif. Sekarang saatnya untuk mengubah perbaikan nama penulis Anda menggunakan perintah di atas. Dia akan membuka editor lagi. Tutup dan lanjutkan reboot dengan git rebase --continue . U>No rebase in progress? .

69
29 авг. jawabannya diberikan oleh Fatih 29 Agustus. 2015-08-29 03:52 '15 pada 3:52 2015-08-29 03:52

Jawaban untuk pertanyaan yang terhubung dengan Anda adalah jawaban yang baik dan mencakup situasi Anda (pertanyaan lain lebih umum, karena melibatkan penulisan u>

Sebagai dalih untuk polling git filter-branch saya menulis sebuah skrip untuk menulis u>

15 июня '10 в 8:24 2010-06-15 08:24 Balas diberikan oleh Chris Johnsen pada 15 Juni '10 pada 8:24 2010-06-15 08:24

Saat menjalankan git rebase -i ada sedikit hal menarik di dokumen ini:

Jika Anda ingin mengatur u>"pick" dengan komit kedua dan selanjutnya dengan "squash" atau "fixup" . Jika komit memiliki penulis yang berbeda, fixer yang dilipat akan dikaitkan dengan penulis komit pertama. Pesan komit yang diajukan untuk komit terlipat adalah gabungan dari pesan komit dari komit pertama dan perintah dengan perintah "squash" , tetapi menghi>"fixup" .

  • Jika Anda memiliki riwayat ABCDEF ,
  • dan Anda ingin mengubah komit B dan D (= 2 komit),

maka kamu bisa melakukan:

  • git config user.name "Correct new name"
  • git config user.email "correct@new.email"
  • buat komit kosong (satu untuk setiap komit):
    • Anda memerlukan pesan untuk tujuan penerusan
    • git commit --allow-empty -m "empty"
  • mulai operasi reboot
    • git rebase -i B^
    • B^ memilih elemen induk B
  • Anda harus meletakkan satu komit kosong sebelum setiap komit berubah
  • Anda perlu mengubah pick untuk squash untuk mereka.

Contoh dari apa yang akan diberikan git rebase -i B^ :

 pick sha-commit-B some message pick sha-commit-C some message pick sha-commit-D some message pick sha-commit-E some message pick sha-commit-F some message # pick sha-commit-empty1 empty # pick sha-commit-empty2 empty 

ubah ke:

 # change commit B author pick sha-commit-empty1 empty squash sha-commit-B some message # leave commit C alone pick sha-commit-C some message # change commit D author pick sha-commit-empty2 empty squash sha-commit-D some message # leave commit EF alone pick sha-commit-E some message pick sha-commit-F some message 

Dia akan meminta Anda untuk mengedit pesan:

 # This is a combination of 2 commits. # The first commit message is: empty # This is the 2nd commit message: ...some useful commit message there... 

dan Anda bisa menghapus beberapa baris pertama.

12
28 авг. jawabannya diberikan dnozay 28 Agustus. 2013-08-28 04:03 '13 pada 4:03 2013-08-28 04:03

Ada satu >jawaban Amber jika Anda menggunakan repositori pusat:

git push -f untuk memaksa repositori pusat untuk memperbarui.

Berhati-hatilah untuk tidak memiliki banyak orang dalam satu cabang, karena dapat menyebabkan hi>

11
20 дек. Jawabannya diberikan oleh Fabian76 20 Des. 2013-12-20 18:06 '13 pada 18:06 2013-12-20 18:06

Memperbaiki di depan:

2019

Pertanyaan lain tentang tag atau Ajukan Pertanyaan