Anda dapat menganggap Git sebagai database lanjutan dari snapshot direktori kerja Anda.
Salah satu fitur yang sangat bagus dari Git adalah kemampuannya untuk menulis ulang sejarah komit.
Alasan utama untuk melakukan ini adalah bahwa banyak riwayat seperti itu hanya relevan untuk pengembang yang membuatnya, jadi itu harus disederhanakan, atau dibuat lebih bagus, sebelum mengirimkannya ke repositori bersama.
Menekan komit berarti, dari sudut pandang idiomatik, untuk memindahkan perubahan yang diperkenalkan dalam komit tersebut ke induknya sehingga Anda berakhir dengan satu komit, bukan dua (atau lebih).
Jika Anda mengulangi proses ini beberapa kali, Anda dapat mengurangi n komit menjadi satu.
Secara visual, jika Anda mulai pekerjaan Anda di komit ditandai Mulai , Anda ingin ini

Anda mungkin memperhatikan bahwa komit baru memiliki warna biru yang sedikit lebih gelap. Ini disengaja.
Dalam Git squashing dicapai dengan Rebase , dengan bentuk khusus yang disebut Rebase Interaktif .
Menyederhanakan saat Anda melakukan rebase satu set komit ke dalam cabang B , Anda menerapkan semua perubahan yang diperkenalkan oleh komit tersebut saat sudah selesai, mulai dari B, bukan dari leluhur aslinya.
Petunjuk visual
Perhatikan lagi corak biru yang berbeda.
Sebuah rebase interaktif memungkinkan Anda memilih bagaimana komit harus di-rebase. Jika Anda menjalankan perintah ini:
git rebase -i branch
Anda akan mendapatkan file yang mencantumkan komit yang akan di-rebased
pick ae3...
pick ef6...
pick 1e0...
pick 341...
Saya tidak menyebutkan komitmennya, tetapi keempat komitmen ini dimaksudkan sebagai komitmen dari Awal hingga Kepala
Hal yang menyenangkan tentang daftar ini adalah dapat diedit .
Anda dapat menghilangkan komit, atau menghentikannya .
Yang harus Anda lakukan adalah mengubah kata pertama menjadi squash .
pick ae3...
squash ef6...
squash 1e0...
squash 341...
Jika Anda menutup editor dan tidak ada konflik penggabungan yang ditemukan, Anda akan mendapatkan riwayat ini:

Dalam kasus Anda, Anda tidak ingin melakukan rebase ke cabang lain, melainkan ke commit sebelumnya.
Untuk mengubah sejarah seperti yang ditunjukkan pada contoh pertama, Anda harus menjalankan sesuatu seperti
git rebase -i HEAD~4
ubah "perintah" untuk menghentikan semua komitmen selain yang pertama, lalu tutup editor Anda.
Catatan tentang mengubah sejarah
Di Git, komit tidak pernah diedit. Mereka dapat dipangkas, dibuat tidak dapat dijangkau, dikloning tetapi tidak diubah.
Saat Anda melakukan rebase, Anda sebenarnya sedang membuat komitmen baru.
Yang lama tidak lagi dapat dijangkau oleh wasit mana pun, jadi tidak ditampilkan dalam riwayat tetapi mereka masih ada!
Inilah yang sebenarnya Anda dapatkan untuk rebase:

Jika Anda telah mendorongnya ke suatu tempat, menulis ulang histori sebenarnya akan membuat cabang!