Riwayat Git saya terlihat seperti itu:
Saya ingin menggabungkan komitmen ungu menjadi satu. Saya tidak ingin melihatnya lagi di log komit saya.
Saya sudah mencoba melakukan a git rebase -i 1
, tetapi meskipun 1
berada di cabang biru (lih. Gambar), saya masih melihat setiap komit di cabang ungu saya.
Bagaimana saya bisa sepenuhnya menghapus cabang ungu (dari log komit)?
git
git-merge
git-rebase
Benjamin Toueg
sumber
sumber
Jawaban:
Lakukan
git rebase -i <sha before the branches diverged>
ini akan memungkinkan Anda untuk menghapus komit gabungan dan log akan menjadi satu baris seperti yang Anda inginkan. Anda juga dapat menghapus komitmen apa pun yang tidak Anda inginkan lagi. Alasan mengapa rebase Anda tidak berfungsi adalah karena Anda tidak mundur cukup jauh.PERINGATAN: Anda menulis ulang sejarah dengan melakukan ini. Melakukan ini dengan perubahan yang telah didorong ke repo jarak jauh akan menyebabkan masalah. Saya merekomendasikan hanya melakukan ini dengan komit yang bersifat lokal.
sumber
git rebase
dan mereka akan dihapus.Dimulai dengan repo dalam keadaan semula
Untuk menghapus komit gabungan dan memadatkan cabang menjadi satu komit di jalur utama
Gunakan perintah ini (mengganti 5 dan 1 dengan SHA dari komit yang sesuai):
Untuk mempertahankan komit gabungan tapi squash cabang komit menjadi satu:
Gunakan perintah ini (mengganti 5, 1 dan C dengan SHA dari komit yang sesuai):
Untuk menghapus komit gabungan dan menggantinya dengan komit individu dari cabang
Lakukan saja (mengganti 5 dengan SHA dari komit yang sesuai):
Dan akhirnya, untuk menghapus seluruh cabang
Gunakan perintah ini (mengganti C dan D dengan SHA dari komit yang sesuai):
sumber
git rebase 5 master
kasus, mengapa tidak "ABC 1 2 3 4 5 D ..." order?master
tidak memiliki kesamaan dengan5
dan menjatuhkannya di atasnya5
. Komit diC
bukanlah bagian dari garis keturunan5
, itu yang pertama dipindahkan ke atas5
.git rebase C 5; git rebase 5 master
Untuk Hanya Menghapus Komitmen Gabungan
Jika semua yang ingin Anda lakukan adalah menghapus komit gabungan (2) sehingga tidak pernah terjadi, perintahnya adalah sebagai berikut
git rebase --onto <sha of 1> <sha of 2> <blue branch>
Dan sekarang cabang ungu tidak ada di log komit biru sama sekali dan Anda memiliki dua cabang terpisah lagi. Anda kemudian dapat menekan ungu secara mandiri dan melakukan manipulasi lain apa pun yang Anda inginkan tanpa melakukan penggabungan.
sumber
Ada dua cara untuk mengatasinya berdasarkan apa yang Anda inginkan:
Solusi 1 : Hapus komit ungu, pertahankan riwayat (jika Anda ingin memutar kembali)
-m 1
menentukan baris induk mana yang akan dipilihKomit ungu akan tetap ada dalam riwayat tetapi karena Anda telah mengembalikan, Anda tidak akan melihat kode dari komit tersebut.
Solusi 2 : Hapus komit ungu sepenuhnya (perubahan yang mengganggu jika repo dibagikan)
dan hapus (hapus garis) sesuai dengan komitmen ungu.
Ini akan lebih mudah jika komit tidak dibuat setelah penggabungan. Komit tambahan meningkatkan kemungkinan konflik selama
revert/rebase
.sumber
1 - 1 = 0
. Tetapi jika Anda kemudian menghapus kembali komitmen ungu, Anda meninggalkan tambalan yang dikembalikan, kecuali jika Anda mengubah kembali itu juga. Jika tidak, ini seperti menerapkan-1
ke riwayat Anda, tidak0
, jadi Anda akan meninggalkan perubahan yang tidak Anda inginkan.