Ia mengatakan:
Saat Anda menyimpan dan keluar dari editor, itu akan memundurkan Anda kembali ke komit terakhir dalam daftar itu dan menjatuhkan Anda pada baris perintah dengan pesan berikut:
$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with
Itu tidak berarti:
ketik lagi git rebase -i HEAD~3
Cobalah untuk tidak mengetik git rebase -i HEAD~3
ketika keluar dari editor, dan itu akan berfungsi dengan baik.
(Jika tidak, dalam situasi khusus Anda, git rebase -i --abort
mungkin diperlukan untuk mengatur ulang semuanya dan memungkinkan Anda untuk mencoba lagi)
Seperti yang disebutkan oleh Dave Vogt dalam komentar, git rebase --continue
adalah untuk pergi ke tugas berikutnya dalam proses rebasing, setelah Anda mengubah komit pertama .
Juga, Gregg Lind menyebutkan dalam jawabannya pada reword
perintahgit rebase
:
Dengan mengganti perintah "pilih" dengan perintah "edit", Anda dapat meminta git rebase
berhenti setelah menerapkan komit itu, sehingga Anda dapat mengedit file dan / atau pesan komit, mengubah komit, dan melanjutkan rebasing.
Jika Anda hanya ingin mengedit pesan komit untuk komit, ganti perintah " pick
" dengan perintah " reword
" , sejak Git1.6.6 (Januari 2010) .
Itu melakukan hal yang sama ' edit
' lakukan selama rebase interaktif, kecuali itu hanya memungkinkan Anda mengedit pesan komit tanpa mengembalikan kontrol ke shell . Ini sangat berguna.
Saat ini jika Anda ingin membersihkan pesan komit, Anda harus:
$ git rebase -i next
Kemudian atur semua komit ke 'edit'. Kemudian pada masing-masing:
# Change the message in your editor.
$ git commit --amend
$ git rebase --continue
Menggunakan ' reword
' bukannya ' edit
' memungkinkan Anda melewatkan git-commit
dan git-rebase
menelepon .
git rebase --continue
lanjutkan ke tugas berikutnya dalam proses rebasing, setelah Anda mengubah komit pertama.Seperti yang disarankan Gregg Lind, Anda dapat menggunakan reword untuk diminta untuk hanya mengubah pesan komit (dan membiarkan komit tetap utuh):
Di sini,
n
adalah daftar dari n komitmen terakhir.Misalnya, jika Anda menggunakan
git rebase -i HEAD~4
, Anda mungkin melihat sesuatu seperti ini:Sekarang ganti pick dengan reword untuk komit yang ingin Anda edit pesan:
Keluar dari editor setelah menyimpan file, dan selanjutnya Anda akan diminta untuk mengedit pesan untuk komit yang telah Anda tandai reword , dalam satu file per pesan. Perhatikan bahwa itu sudah jauh lebih mudah untuk hanya mengedit komit pesan ketika Anda diganti
pick
denganreword
, tetapi melakukan hal itu tidak berpengaruh.Pelajari lebih lanjut di halaman GitHub untuk Mengubah pesan komit .
sumber
FWIW, git rebase interaktif sekarang memiliki opsi "reword", yang membuat ini jauh lebih menyakitkan!
sumber
reword
, mengapa git tidak membiarkan Anda mengedit pesan komit di file itu dengan daftar commit? Sebaliknya itu akan meluncurkan editor dengan satu file pesan komit perreword
baris. Ini tidak perlu. Bahkan jika tindakan lain selainpick
ataureword
memerlukan meluncurkan perintah eksternal,reword
tidak akan mengharuskan itu.Hanya ingin memberikan opsi berbeda untuk ini. Dalam kasus saya, saya biasanya bekerja pada cabang individu saya kemudian bergabung untuk menguasai, dan individu yang saya lakukan untuk lokal saya tidak begitu penting.
Karena kait git yang memeriksa nomor tiket yang sesuai pada Jira tetapi case-sensitive, saya dicegah untuk mendorong kode saya. Juga, komit sudah dilakukan sejak lama dan saya tidak ingin menghitung berapa banyak komit untuk kembali pada rebase.
Jadi apa yang saya lakukan adalah membuat cabang baru dari master terbaru dan squash semua komit dari cabang bermasalah menjadi satu komit di cabang baru. Itu lebih mudah bagi saya dan saya pikir itu ide yang baik untuk memilikinya di sini sebagai referensi di masa depan.
Dari master terbaru:
Kemudian
Referece: https://github.com/rotati/wiki/wiki/Git:-Combine-all-messy-commits-into-one-commit-before-merging-to-Master-branch
sumber
rebase -i
seperti sekitar 2 jam dan tidak berhasil. Komit saya ada di belakang 18 komit, jadi bisa Anda bayangkan. Ini adalah cara yang lebih sederhana dan praktis yang dapat saya temukan tanpa perlu menggunakan rebase. Terima kasih teman!Berikut adalah inti yang sangat bagus yang mencakup semua kasus yang mungkin: https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4
Gambaran:
sumber