Saya memiliki pohon kerja yang berisi 3 komitmen:
➜ ~ myproject git: (master) git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <[email protected]>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <[email protected]>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <[email protected]>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
Sekarang saya ingin reword
pesan commit pertama saya commit (6707a66)
➜ ~ myproject git: (master) git rebase -i 6707
(… Memasuki vim)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
Dalam hal ini, saya ingin mengoreksi ( reword
dalam bahasa git) pesan komit yang dimaksud:
Komitmen awal (dengan pesan yang menyesatkan)
… Untuk sesuatu yang sesuai.
Tidak mengherankan, upaya saya di atas tidak berhasil karena komit pertama jelas tidak memiliki komit orang tua . (Dan ketika Anda rebase
, Anda perlu merujuk pada komit terlama berikutnya sebelum yang Anda inginkan reword
, bukan?)
Inti dari pertanyaan saya, dengan demikian, dapatkah Anda mencapai ini dengan cara lain melakukan itu?
Jawaban:
Melakukan
git rebase -i --root
(arahkan ke
root
alih-alih menunjuk ke komit tertentu)Dengan cara ini, komit pertama juga disertakan dan Anda bisa
reword
melakukannya seperti komit lainnya.The
--root
pilihan diperkenalkan pada Gitv1.7.12
(2012). Sebelumnya, satu-satunya pilihan adalah menggunakanfilter-branch
atau--amend
, yang biasanya lebih sulit dilakukan.Catatan: lihat juga pertanyaan dan jawaban serupa ini .
sumber
Anda selalu dapat menggunakan
git filter-branch --msg-filter
:sumber
-f
itu akan dilanjutkan dan selalu menulis ulang komit dari cabang yang diberikan. Nilai referensi cabang dari pertama kali disimpanrefs/original/master
, sebelum Anda menjalankan perintah.inti pcreux memiliki cara yang baik untuk menulis ulang komit pertama:
sumber
git rebase -i --root
adalah cara terbaik, seperti yang disarankan oleh florisla.