Cara Menghapus Commit Git: Panduan Praktis dan Terbaik!

Prasatya 12 Februari 2024

Cara Menghapus Commit Git: Panduan Praktis dan Terbaik!

Menghapus commit dalam Git adalah tindakan yang mungkin perlu dilakukan dalam pengembangan perangkat lunak. Dengan menggunakan perintah-perintah khusus seperti git revert, git reset, dan parameter-parameter tertentu, Kamu dapat membersihkan history repository Git dengan mudah. Sooo.... Mari kita bahas cara menghapus commit dengan praktis dan panduan langkah demi langkah. Simak dengan seksama ya!

Dengan Perintah Git Log

Sebelum kita masuk ke proses menghapus commit, penting untuk memahami history commit di dalam repositor Kamu. Dengan perintah git log, Kamu dapat melihat daftar commit secara kronologis dengan informasi yang relevan seperti ID commit, penulis, dan pesan commit.

Jika Kalian periksa git log dan menemukan commit yang ingin dihapus, langkah pertama adalah mencatat ID commit tersebut. Hal ini memastikan bahwa Kamu tahu commit mana yang akan dihapus.

Baca Juga: Full stack Developer Roadmap, Sekarang memiliki Alur Belajar Baru! Buruan, jangan sampai ketinggalan!

Git Revert: Membatalkan Commit Tanpa Menghapus History

Salah satu cara untuk menghapus commit adalah dengan menggunakan perintah git revert. Perintah ini membuat commit baru yang membatalkan perubahan yang terjadi pada commit sebelumnya. Ini merupakan pilihan yang lebih aman karena tidak menghapus history commit, melainkan menambahkan commit baru yang membatalkan perubahan.

Pertama, kita lihat dulu history commit dengan perintah git log/ git log --oneline.


$ git log --oneline
8caas8c (HEAD -> main) add javascript
9df889s add paragraph
op09821 adding h1
7dcdd7e adding css
4cc653w layout dasar

Misalnya kamu ingin membatalkan modifikasi "add paragraph" pada commit id 9df889s. Maka ketikan pada terminal:


$git revert 9df889s

Setelah perintah telah di eksekusi oleh git, akan muncul COMMIT_EDITMSG pada text editor default yang di setting pada waktu instalasi.

output yang dihasilkan akan seperti ini, kamu perlu melakukan git log/ git log --oneline:


$ git log --oneline 
5da5ass (HEAD -> main) Revert "add paragraph"
8caas8c  add javascript
9df889s add paragraph
op09821 adding h1
7dcdd7e adding css
4cc653w layout dasar

Bisa dilihat, commit baru dibuat (commit 5da5ass) untuk membatalkan add paragraph pada commit id 3cc339d. Perubahan dengan menggunakan git revert, tidak akan mempengaruhi commit id lainnya.

Git Reset: Membersihkan History dengan Hati-hati

Jika Kamu ingin membersihkan history commit secara lebih drastis, git reset bisa menjadi pilihan. Perintah ini memungkinkan Kamu untuk mengatur posisi HEAD dan branch ke commit tertentu. Tersedia beberapa parameter reset, yaitu --soft, --mixed, dan --hard. Namun perlu kehati-hatian dalam melakukan f=git reset. Karena bisa menghapus commit secara permanent.

Untuk keperluan pembelajaran, kita bisa menambahkan file index.html dan app.js


$ git add index.html
$ git commit -m "add menu bar"
[main 781ae23] add menu bar
 1 file changed, 7 insertions(+)

git add app.js
PS F:\Project\gitWeb> git commit -m "add cont  b"
[main aafb485] add cont  b
 1 file changed, 2 insertions(+), 1 deletion(-)
 

Kemudian, bisa kita cek commit history


$ git log --oneline
aafb485 (HEAD -> main) add cont  b
781ae23 add menu bar
5da5ass Revert "add paragraph"
8caas8c  add javascript
9df889s add paragraph
op09821 adding h1
7dcdd7e adding css
4cc653w layout dasar
parameter --soft: Kembali ke ID Commit dengan Perubahan Tersimpan

Jika kamu ingin kembali ke commit tertentu tanpa menghapus perubahan di working directory, gunakan parameter --soft.

Pertama kita log dahulu history commit


$ git log --oneline 
5da5ass (HEAD -> main) Revert "add paragraph"
8caas8c  add javascript
9df889s add paragraph
op09821 adding h1
7dcdd7e adding css
4cc653w layout dasar

Contoh kita akan hapus 5da5ass dan 8caas8c, maka gunakan perintah berikut

Kemudian lakukan perintah seperti di bawah ini:


$ git reset --soft 9df889s

Jika kita cek log history:


$ git log --oneline       
9df889s (HEAD -> main) add paragraph
op09821 adding h1
7dcdd7e adding css
4cc653w layout dasar

Commit sudah dihapus dari history dan perubahan tidak dilakukan pada file. Jika kita periksa status:


$ git status
On branch main
Changes to be committed:
  (use "git restore --staged ..." to unstage)
	 new file: app.js
   modified:   index.html

File bersangkutan masih dalam fase staged. (pada parameter mixed file dipindahkan ke fase unstaged).

Jika kita ingin menghapus secara permanen, maka langkah selanjutnya adalah menjalan perintah git reset dan git checkout.


$ git reset .
$ git checkout .

Baca Juga: 13+ Rahasia Dibalik Skills Frontend Developer di Buru Perusahaan

parameter --mixed: Kembali ke ID Commit dengan Perubahan Unstaged

Jika kamu ingin menghapus perubahan dari staging area dan kembali ke commit tertentu, gunakan parameter --mixed.

Contoh, kita akan menghapus commit penambahan const b (id aafb485) dan menu bar (id 781ae23), maka perintahnya adalah:


$git reset --mixed 5da5ass
Unstaged changes after reset:
M       app.js
M       index.html

Note: id yang digunakan adalah id terakhir dimana commit akan TETAP disimpan. Pada contoh id 3d53c8b (revert “add paragraph”).

Coba check file yang dimaksud (index.html dan app.js), perhatikan element navigasi dan deklarasi const tidak dihapus. Jika anda cek dengan git status.


$ git status
On branch main
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   app.js
        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

Untuk menghapus secara permanent, gunakan perintah git checkout.


$ git checkout *
Updated 2 paths from the index

Jika Anda periksa, maka perubahan sudah dihapus dari file yang bersangkutan.

parameter --hard: Kembali ke ID Commit dan Hapus Perubahan

Jika kamu siap untuk menghapus perubahan di working directory dan staging area, gunakan parameter --hard.

Perhatian: harap ekstra hati-hati menggunakan perintah git reset –hard.


$ git log --oneline       
9df889s (HEAD -> main) add paragraph
op09821 adding h1
7dcdd7e adding css
4cc653w layout dasar

Contoh, kita ingin menghapus snapshot kembali ke id 4cc653w (layout dasar).


$ git reset --hard 4cc653w

history commit snapshot akan dihapus, semua perubahan pada file akan otomatis dihapus juga.

Git Restore: Mengembalikan File Secara Otomatis

Sama seperti parameter --soft dan --mixed pada git reset, git restore juga dapat membantu Anda mengelola perubahan di working directory. Dengan menggunakan git restore, Anda dapat mengembalikan file ke keadaan sebelumnya tanpa mengubah commit.


git restore layout dasar
Unstaged Changes: Perubahan yang Belum Disimpan

Perhatikan bahwa perintah-perintah di atas akan mengubah status commit, namun perubahan yang belum disimpan (unstaged changes) masih ada di working directory. Pastikan untuk melakukan git add dan git commit lagi jika sudah siap untuk menyimpan perubahan.

Kesimpulan

Dalam proses pengembangan perangkat lunak, terkadang kita perlu membersihkan sejarah commit untuk berbagai alasan. Melalui penggunaan perintah git revert, git reset dengan berbagai parameter seperti --soft, --mixed, dan --hard, serta git restore, Anda dapat mengelola commit dengan lebih baik.

Penting untuk selalu berhati-hati saat menggunakan perintah-perintah ini, karena penggunaan yang tidak benar dapat menyebabkan kehilangan data. Dengan pemahaman yang baik tentang setiap perintah, Anda dapat menghapus commit dengan aman dan efisien. Jangan lupa untuk selalu membuat backup sebelum melakukan perubahan besar pada repository Anda. Happy coding!