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@address.com>" --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@address.com>"
  6. Kemudian git rebase --continue
  7. Itu akan berhenti lagi di D
  8. Maka Anda akan melakukannya git commit --amend --author="Author Name <email@address.com>"lagi
  9. git rebase --continue
  10. Rebase akan selesai.
  11. Gunakan git push -funtuk memperbarui asal Anda dengan komitmen yang diperbarui.

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

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="your-old-email@example.com"
    CORRECT_NAME="Your Correct Name"
    CORRECT_EMAIL="your-correct-email@example.com"
    
    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'
    

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 example@email.com

  • Sekarang atur ulang pembuat komit Anda tanpa mengedit:

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


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 first.last@example.com. 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@address.com>"

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.


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 <my@new-auth.or>"
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

+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@address.com>"

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 <foo@bar.com>\"" 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

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.


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 "correct@new.email"
  • 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.


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"

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 "newuser@gmail.com"

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 "newuser@gmail.com"
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

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.


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.


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 <author.name@mail.com>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <author.name@mail.com>'

    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


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 "john@doe.org"

Mengubah Nama Pengirim Anda & Email per Repositori:

$ git config user.name "John Doe"
$ git config user.email "john@doe.org"

Mengubah Informasi Penulis Hanya Untuk Komit Berikutnya:

$ git commit --author="John Doe <john@doe.org>"

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


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

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).


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="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.