Ada beberapa cara untuk mengubah pesan dari commit di kemudian hari:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Bagaimana Anda bisa mengubah pesan komit dari komit pertama (yang tidak memiliki orang tua)?
git filter-branch --msg-filter
Jawaban:
Dengan asumsi bahwa Anda memiliki pohon kerja yang bersih, Anda dapat melakukan hal berikut.
sumber
git rebase --onto HEAD <sha1-of-root> master
.git rebase
.git rebase
berlaku komit di <branch> (master
) yang tidak ada di <upstream>;HEAD
tidak adamaster
, jadi versi Anda mencoba menerapkan semuanyamaster
.git rebase --onto HEAD <sha1-of-root>
master, di mana<sha1-of-root>
sama digunakan digit checkout <sha1-of-root>
. Kalau tidak, Anda akan memiliki 2first commit
.HEAD
memastikan bahwa semua komit dipertimbangkan dan bahwa kita dapat menggunakan dua versi parameter rebase untuk kembali ke master. Harap perhatikan bahwa jawaban ini mendahului adanya--root
opsi untuk rebase.Pada Git versi 1.7.12 , Anda sekarang dapat menggunakan
Dokumentasi
sumber
Untuk memperluas jawaban ecdpalma , Anda sekarang dapat menggunakan
--root
opsi untuk memberi tahurebase
bahwa Anda ingin menulis ulang root / komit pertama:Kemudian komit root akan muncul dalam daftar rebase TODO, dan Anda dapat memilih untuk mengedit atau menulis ulang:
Ini adalah penjelasan
--root
dari dokumen Git rebase (penekanan pada saya):sumber
Hanya untuk memberikan alternatif bagi jawaban yang berperingkat lebih tinggi:
Jika Anda membuat repo, dan tahu di muka bahwa Anda akan rebasing di atas komit nyata "pertama" di masa depan, Anda dapat menghindari masalah ini sama sekali dengan membuat komit kosong eksplisit di awal:
dan baru kemudian mulai melakukan komitmen "nyata". Maka Anda dapat dengan mudah rebase di atas yang melakukan cara standar, misalnya
git rebase -i HEAD^
sumber
.gitattributes
file daripada melakukan komit kosong.Anda bisa menggunakan
git filter-branch
:sumber
-- --all
opsi memang adalah kunci dalam hal ini untuk dapat juga menangani root commit.