Bagaimana cara mengubah komit penulis untuk satu komit tertentu?

Jawaban:

3568

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 dari pickmenjadi di editsebelah hash yang ingin Anda modifikasi. Kemudian ketika git meminta Anda untuk mengubah komit, gunakan ini:

git commit --amend --author="Author Name <[email protected]>" --no-edit

Misalnya, jika sejarah commit Anda adalah A-B-C-D-E-Fdengan Fsebagai HEAD, dan Anda ingin mengubah penulis Cdan D, maka Anda akan ...

  1. Tentukan git rebase -i B(di sini adalah contoh dari apa yang akan Anda lihat setelah menjalankan git rebase -i Bperintah )
    • jika Anda perlu mengedit A, gunakangit rebase -i --root
  2. Ubah garis untuk keduanya Cdan Ddari pickmenjadiedit
  3. Keluar dari editor (untuk vim, ini akan menekan Esc dan kemudian mengetik :wq).
  4. Setelah rebase dimulai, itu akan berhenti dulu di C
  5. Kamu akan git commit --amend --author="Author Name <[email protected]>"
  6. Kemudian git rebase --continue
  7. Itu akan berhenti lagi di D
  8. Maka Anda akan melakukannya git commit --amend --author="Author Name <[email protected]>"lagi
  9. git rebase --continue
  10. Rebase akan selesai.
  11. Gunakan git push -funtuk memperbarui asal Anda dengan komitmen yang diperbarui.
Amber
sumber
90
Jawaban yang bagus, tetapi untuk pemula: pertama-tama temukan komit sebelum yang ingin Anda ubah, kemudian jalankangit rebase -i <commit>
Mathew Byrne
47
Jika Anda tidak tahu editor apa yang Anda gunakan, jawabannya mungkin 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.
Amber
30
bagaimana jika Anda ingin memodifikasi komit pertama? Apa hash komit sebelumnya?
Brenden
219
Gunakan --no-editopsi. git commit --amend --reset-author --no-edittidak akan membuka editor. Tersedia sejak git 1.7.9.
5lava
51
@ Brenden untuk memodifikasi komit pertama dalam proyek, gunakangit rebase -i --root
Noah Passalacqua
488

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 03f482d6merupakan komit yang penulisnya kami coba ganti, dan 42627abekomit dengan penulis baru.

  1. Lihat komit yang kami coba modifikasi.

    git checkout 03f482d6
    
  2. Buat pengarangnya berubah.

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

    Sekarang kita memiliki komitmen baru dengan hash yang diasumsikan 42627abe.

  3. Periksa cabang asli.

  4. Ganti komit lama dengan yang baru secara lokal.

    git replace 03f482d6 42627abe
    
  5. Tulis ulang semua komitmen di masa mendatang berdasarkan penggantian.

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

    git replace -d 03f482d6
    
  7. Dorong riwayat baru (hanya gunakan - memaksa jika di bawah gagal, dan hanya setelah kewarasan memeriksa dengan git logdan / atau git diff).

    git push --force-with-lease
    

Alih-alih 4-6 Anda hanya dapat rebase ke komit baru:

git rebase -i 42627abe
merlin2011
sumber
9
Harap tulis di sana untuk checkout kembali cabang asli Anda setelah langkah 2.
Benjamin Riggs
42
Ini terlihat jauh lebih jelas daripada alternatif yang mengerikan git rebase -i. Belum pernah mendengar git replacehal ini sebelumnya. +1
FractalSpace
3
Untuk membersihkan referensi / asli / ... cadangan, lihat di sini
alexis
5
Saya sarankan menggunakan, --force-with-leasebukan -f. Lebih aman.
Jay Bazuzi
11
PERINGATAN: berhati-hatilah dengan git filter-branch -- --allmengubah 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.
ribamar
225

Dokumentasi Github berisi skrip yang menggantikan info committer untuk semua komit di cabang .

  • Jalankan skrip berikut dari terminal setelah mengubah nilai variabel

    #!/bin/sh
    
    git filter-branch --env-filter '
    
    OLD_EMAIL="[email protected]"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="[email protected]"
    
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' --tag-name-filter cat -- --branches --tags
    
  • Dorong riwayat yang diperbaiki ke GitHub:

    git push --force --tags origin 'refs/heads/*'
    

    ATAU jika Anda ingin mendorong referensi yang dipilih dari cabang kemudian gunakan

    git push --force --tags origin 'refs/heads/develop'
    
olivieradam666
sumber
12
Ini mengubahnya di semua komit, bukan hanya satu. Lucunya, saya melakukan ini kurang dari 30 menit yang lalu.
Artjom B.
Ketika saya menemukan jawaban ini setelah membaca yang sebelumnya saya pikir layak untuk dicoba dan voila berhasil. Namun dalam kasus saya itu mengubah nama committer hanya pada komit awal. Ngomong-ngomong, sebelumnya saya mencoba ide dari jawaban pertama. Mungkin itu mempengaruhi sistem entah bagaimana.
Ruslan Gerasimov
2
Perhatikan bahwa jika Anda menghindari menggunakan clone/ push, Anda akan berakhir dengan namespace cadangan refs/original/. Saya tidak dapat menemukan cara untuk menghapus namespace ini dengan cerdas, jadi saya akhirnya menghapus direktori .git/refs/original, yang berhasil.
VasiliNovikov
Mengapa ini menghasilkan perubahan pada repo jika misalnya OLD_EMAIL tidak cocok dengan apa pun? Untuk beberapa alasan beberapa (tetapi tidak semua!) Melakukan perubahan hash.
mjs
1
Kasus penggunaan saya untuk jawaban ini adalah: Saya memiliki dua akun github, yang saya tidak sengaja gunakan untuk membuat komitmen. Script ini membantu memperbaiki semua komit saya dengan mengganti nama email / nama committer yang salah. Tentu saja, jika saya telah melakukan dengan pengguna yang salah dari, katakanlah, komit ke 50 ke komit ke-500, akan ada 450 komit yang berbeda. Bagaimanapun, setelah menjalankan skrip, seperti yang ditunjukkan @andrej, Anda harus git push -fmemaksakan perubahan pada repo.
LWY
168
  • 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

pravbeatle
sumber
2
Tidak, tidak. Lihatlah OP: It's not last commit.Jadi bagaimana mereka amendmelakukannya?
underscore_d
2
Ini hebat, sayang sekali itu adalah komitmen terakhir saja. Saya membutuhkannya pada dua yang terbaru, untungnya, jadi hanya melakukan git reset HEAD~, jalankan baris yang disarankan, lalu lakukan komit berikutnya secara manual lagi. Bekerja dengan baik!
Matt Fletcher
2
Terima kasih! --Reset-penulis melakukan trik untuk saya, karena tanpa itu penulis berubah tetapi "komiter" tetap dengan rincian penulis lama.
Lucas P.
9
Untuk memperbaiki enam commit terakhir saya: Pertama atur penulis yang benar untuk repo Git saat ini menggunakan git config --local user.name FirstName LastName dan git config --local user.email [email protected]. Kemudian gunakan enam komitmen terakhir menggunakan git rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6. Akhirnya dorong ke repo Git menggunakan remote git push --force-with-lease.
olibre
@ Colibre itu berfungsi seperti pesona, terima kasih.
Bruno Gasparotto
88

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.

https://monosnap.com/file/G7sdn66k7JWpT91uiOUAQWMhPrMQVT.png

Ubah pickkata kunci menjadi edituntuk komit yang ingin Anda ubah nama pembuatnya.

https://monosnap.com/file/dsq0AfopQMVskBNknz6GZZwlWGVwWU.png

Kemudian tutup editor. Untuk pemula, tekan Escapelalu ketik :wqdan tekan Enter.

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 menerima No rebase in progress?pesan.

Fatih Acet
sumber
Bisakah Anda memperbarui gambar Anda?
Shimmy Weitzhandler
1
Jika Anda memiliki beberapa komitmen untuk diubah, alih-alih mengeditnya satu per satu, Anda juga dapat membiarkan picktindakan, dan menambahkan setelah setiap barisexec git commit --no-edit --amend --author="MyNewAuthor <[email protected]>"
Pierre-Olivier Vares
60

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:

#!/bin/sh

#
# Change the author name and/or email of a single commit.
#
# change-author [-f] commit-to-change [branch-to-rewrite [new-name [new-email]]]
#
#     If -f is supplied it is passed to "git filter-branch".
#
#     If <branch-to-rewrite> is not provided or is empty HEAD will be used.
#     Use "--all" or a space separated list (e.g. "master next") to rewrite
#     multiple branches.
#
#     If <new-name> (or <new-email>) is not provided or is empty, the normal
#     user.name (user.email) Git configuration value will be used.
#

force=''
if test "x$1" = "x-f"; then
    force='-f'
    shift
fi

die() {
    printf '%s\n' "$@"
    exit 128
}
targ="$(git rev-parse --verify "$1" 2>/dev/null)" || die "$1 is not a commit"
br="${2:-HEAD}"

TARG_COMMIT="$targ"
TARG_NAME="${3-}"
TARG_EMAIL="${4-}"
export TARG_COMMIT TARG_NAME TARG_EMAIL

filt='

    if test "$GIT_COMMIT" = "$TARG_COMMIT"; then
        if test -n "$TARG_EMAIL"; then
            GIT_AUTHOR_EMAIL="$TARG_EMAIL"
            export GIT_AUTHOR_EMAIL
        else
            unset GIT_AUTHOR_EMAIL
        fi
        if test -n "$TARG_NAME"; then
            GIT_AUTHOR_NAME="$TARG_NAME"
            export GIT_AUTHOR_NAME
        else
            unset GIT_AUTHOR_NAME
        fi
    fi

'

git filter-branch $force --env-filter "$filt" -- $br
Chris Johnsen
sumber
+1 terima kasih. assembla.com git repo tampaknya tidak mengubah semua referensi penulis dalam tampilan web repo, tetapi hasil 'git pull / clone' tampaknya berfungsi dengan baik.
Johnny Utahh
Solusi hebat, karena hanya mengubah apa yang dimaksudkan, dan bukan bidang lain, seperti tanggal komitmen.
Guillaume Lemaître
12
Dokumentasi Github berisi skrip serupa
olivieradam666
2
@ olivieradam666 yang berfungsi seperti pesona dan lebih mudah dibaca
gratis
@ olivieradam666 Terima kasih. Anda harus benar-benar menambahkan itu sebagai jawaban agar mendapat lebih banyak perhatian.
seane
44

Berkomitmen sebelumnya:

masukkan deskripsi gambar di sini

Untuk memperbaiki penulis untuk semua komit, Anda dapat menerapkan perintah dari jawaban @ Amber:

git commit --amend --author="Author Name <[email protected]>"

Atau untuk menggunakan kembali nama dan email Anda, Anda bisa menulis:

git commit --amend --author=Eugen

Komit setelah perintah:

masukkan deskripsi gambar di sini

Misalnya untuk mengubah semua mulai dari 4025621:

masukkan deskripsi gambar di sini

Anda harus menjalankan:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

Catatan: Untuk menyertakan penulis yang berisi spasi seperti nama dan alamat email, penulis harus dikelilingi oleh tanda kutip. Sebagai contoh:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <[email protected]>\"" 4025621

atau tambahkan alias ini ke ~/.gitconfig:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

Dan kemudian jalankan:

git reauthor 4025621 Eugen
Eugen Konkov
sumber
1
Untuk memverifikasi bahwa perintah itu berfungsi seperti yang diharapkan, saya meninjau output dari git shortlog -e -s.
Taylor Edmiston
5
Ini adalah jawaban yang paling sesuai dengan tujuan saya, terima kasih. Dan karena saya hanya ingin menyesuaikan saya alamat e-mail, saya bisa berjalan dengan = --exec "git commit --amend --reset-penulis", setelah memperbarui saya git / config.
Dato
1
Eeh, tidak yakin mengapa saya lupa! Sekarang selesai.
Dato
Jawaban yang bagus dan sangat mudah untuk diperbaiki. Cintai alias!
J_A_X
itu tidak membantu saya. sekarang saya memiliki kesalahan Lanjutkan Rebase Gagal
Alexey Sh.
17

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.

Fabian76
sumber
16

Ketika melakukan git rebase -iada sedikit yang menarik di doc:

Jika Anda ingin melipat komit dua atau lebih menjadi satu, ganti perintah "pick"untuk komit kedua dan selanjutnya dengan "squash"atau "fixup". Jika komit memiliki penulis berbeda, komit terlipat akan dikaitkan dengan penulis komit pertama. Pesan komit yang disarankan untuk komit yang dilipat adalah gabungan dari pesan komit dari komit pertama dan komit yang dengan "squash"perintah, tetapi menghilangkan pesan komit komit dengan "fixup"perintah.

  • Jika Anda memiliki riwayat A-B-C-D-E-F,
  • dan Anda ingin mengubah komit Bdan D(= 2 komit),

maka kamu bisa melakukan:

  • git config user.name "Correct new name"
  • git config user.email "[email protected]"
  • buat komit kosong (satu untuk setiap komit):
    • Anda memerlukan pesan untuk tujuan rebase
    • git commit --allow-empty -m "empty"
  • memulai operasi rebase
    • git rebase -i B^
    • B^memilih induk dari B.
  • Anda ingin meletakkan satu komit kosong sebelum setiap komit diubah
  • Anda ingin mengubahnya pickmenjadi squashuntuk itu.

Contoh apa yang git rebase -i B^akan memberi Anda:

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 itu menjadi:

# change commit B's 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's author
pick sha-commit-empty2 empty
squash sha-commit-D some message
# leave commit E-F alone
pick sha-commit-E some message
pick sha-commit-F some message

Ini akan meminta Anda untuk mengedit pesan:

# This is a combination of 2 commits.
# The first commit's message is:

empty

# This is the 2nd commit message:

...some useful commit message there...

dan Anda bisa menghapus beberapa baris pertama.

tidak tahu
sumber
16

Sebagai tanggapan Eugen Konkov , untuk memulai dari root commit, gunakan --rootflag. The --no-editbendera membantu juga

git rebase --root --exec "git commit --amend --author='name <email>' --no-edit"
korwalskiy
sumber
Ini berfungsi & diubah di semua komitmen.
SagarKapasi099
1
Terima kasih atas jawabannya. Itu harus menambahkan --interaktif untuk membuatnya berfungsi. git rebase --root --interactive --exec "git commit --amend --author = 'name <email>' --no-edit"
Sreeragh AR
8

Temukan cara yang dapat mengubah pengguna dengan cepat dan tidak memiliki efek samping terhadap komitmen orang lain.

Cara sederhana dan jelas:

git config user.name "New User"
git config user.email "[email protected]"

git log
git rebase -i 1f1357
# change the word 'pick' to 'edit', save and exit

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

git push --force-with-lease

operasi terperinci

  • tampilkan log komit dan temukan id komit di depan komit Anda yang ingin Anda ubah:
git log
  • git rebase mulai dari chosed commit id ke yang terbaru secara terbalik:
git config user.name "New User"
git config user.email "[email protected]"
git rebase -i 1f1357

# change word pick to edit, save and exit
edit 809b8f7 change code order 
pick 9baaae5 add prometheus monitor kubernetes
edit 5d726c3 fix liquid escape issue   
edit 3a5f98f update tags
pick 816e21c add prometheus monitor kubernetes
  • rebase akan Dihentikan pada id komit berikutnya, output:
Stopped at 809b8f7...  change code order 
You can amend the commit now, with
  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
  • konfirmasi dan lanjutkan rebase Anda sampai berhasil refs/heads/master.
# each continue will show you an amend message
# use git commit --amend --reset-author --no-edit to comfirm
# use git rebase --skip to skip
git commit --amend --reset-author --no-edit
git rebase --continue
git commit --amend --reset-author --no-edit
...
git rebase --continue
Successfully rebased and updated refs/heads/master.
  • git push to update
git push --force-with-lease
NOZUONOHIGH
sumber
5

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.

ChannaB
sumber
Saya pikir ini adalah cara paling sederhana untuk melakukannya. Saya menggunakan perintah reword dan itu gagal. Saya belajar bahwa saya perlu menggunakan perintah edit sebagai gantinya. Mungkin kata kunci "edit" dapat disorot. Terima kasih atas jawaban @ChannaB 👍
Berk
sangat mudah untuk mengikuti langkah-langkah. Terima kasih!
Habiba
4

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:

git checkout develop

Buat cabang baru darinya:

git checkout -b myFeature develop 

Gabungkan tanpa komit info sebagai komit:

git merge --no-commit --squash branchWrongAuthor

Anda mungkin juga ingin melakukan perubahan:

git stage .

Ubah nama penulis dan lakukan perubahan:

git commit --amend --author "New Author Name <New Author Email>" -m "new feature added"

Dan hanya itu, Anda dapat mendorong perubahan.

git push

Anda dapat menghapus cabang dengan penulis yang salah setelah itu.

alexlz
sumber
4

Langkah-langkah untuk mengubah nama penulis setelah komit didorong

  1. Pertama-tama ketik "git log" untuk mendapatkan id komit dan detail lebih lanjut
  2. 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.

  3. Kemudian ketik "git rebase --continue" atau "git rebase --abort" sesuai kebutuhan Anda

    • sekarang jendela rebase Anda akan dibuka, klik tombol "i" dari keyboard
    • maka Anda akan mendapatkan daftar komit ke 10 [karena kami telah melewati 10 komit di atas] Seperti di bawah ini

    pick 897fe9e simplify code a little

    pick abb60f9 add new feature

    pick dc18f70 bugfix

  4. 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]>'

    1. Itu saja, sekarang cukup tekan ESC,: wq dan Anda sudah siap

    2. Kemudian git push origin HEAD: BRANCH NAME -f [tolong jaga -f Force push]

    suka git push -fataugit push origin HEAD: dev -f

Kirtikumar A.
sumber
jawaban yang bagus, bisakah Anda memperbarui poin 6 dengan contoh git pushperintah?
Lukasz 'Severiaan' Grela
1
@ Lukasz'Severiaan'Grela diedit, silakan periksa sekarang, Terima kasih
Kirtikumar A.
3

Mengubah Nama Pengirim Anda & Email Secara Global:

$ git config --global user.name "John Doe"
$ git config --global user.email "[email protected]"

Mengubah Nama Pengirim Anda & Email per Repositori:

$ git config user.name "John Doe"
$ git config user.email "[email protected]"

Mengubah Informasi Penulis Hanya Untuk Komit Berikutnya:

$ git commit --author="John Doe <[email protected]>"

Petunjuk : Untuk situasi lain dan baca informasi lebih lanjut baca referensi posting .

Amerika
sumber
2

Jika yang perlu Anda ubah adalah PENULIS TERAKHIR komit dan tidak ada yang lain menggunakan repositori Anda, Anda dapat membatalkan komit terakhir Anda dengan:

git push -f origin last_commit_hash:branch_name 

ubah nama pembuat komit Anda dengan:

git commit --amend --author "type new author here"

Keluar dari editor yang terbuka dan tekan lagi kode Anda:

git push
pebox11
sumber
2

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.

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

Tiga baris kode ini melakukan pekerjaan untuk mengubah pesan commit gabungan (seperti penulis).

Jason Liu
sumber
1

Anda dapat menggunakan perintah ini dari halaman resmi github

https://help.github.com/en/github/using-git/changing-author-info

ini dia perintahnya

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

di sini Anda dapat mengubah email lama menjadi nama pengguna dan alamat email baru Anda.

Mudassir Khan
sumber