Cara membatalkan commit

Untuk membatalkan commit bisa digunakan dua perintah yaitu git revert dan git reset.

git revert

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

$ git log --oneline
728a836 (HEAD -> main) add javascript
7e28c39 add paragraph
c38b6b5 adding h1
7dcdd7e adding css
ed85391 layout dasar

misalnya kita ingin membatalkan penambahan paragraph pada commit id 7e28c39.

$git revert 7e28c39

Setelah perintah dieksekusi git akan membuka file COMMIT_EDITMSG pada text editor default yang disetting pada waktu instalasi.

Anda bisa melakukan perubahan deskripsi perubahan, pada tutorial akan dibiarkan default. Lalu tutup file tersebut.

Jika Anda periksa file index.html, paragraph sudah dihapus. Periksa juga commit history.

$ git log --oneline 
3d53c8b (HEAD -> main) Revert "add paragraph"
728a836 add javascript
7e28c39 add paragraph
c38b6b5 adding h1
7dcdd7e adding css
ed85391 layout dasar

Dapat dilihat, commit baru dibuat (commit id 3d53c8b) untuk membatalkan penambahan paragraph pada commit id 7e28c39. Perubahan dengan menggunakan git revert, tidak akan mempengaruhi commit id lainnya.

git reset

Perlu ekstra hati-hati menggunakan perintah git reset, karena bisa menghapus commit secara permanent. Git reset memiliki option paremeter –mixed, –soft dan –hard.

Untuk keperluan tutorial, mari tambahkan element baru pada file index.html dan file app.js lalu lakukan commit. Pada tutorial ditambahkan element navigasi dan penambahan const.

$ 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(-)

Lalu kita cek commit history

$ git log --oneline
aafb485 (HEAD -> main) add cont  b
781ae23 add menu bar
3d53c8b Revert "add paragraph"
728a836 add javascript
7e28c39 add paragraph
c38b6b5 adding h1
7dcdd7e adding css
ed85391 layout dasar

Tahap persiapan untuk demo sudah siap, mari kita bahas 3 parameter diatas.

parameter –mixed

Adalah default parameter, mixed akan menghapus snapshot commit, namun perubahan pada file project tidak dibuang.

File yang bersangkutan akan masuk ke fase unstaged. Jika ingin menghapus perubahan secara permanent, gunakan perintah git checkout.

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

$git reset --mixed 3d53c8b
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 <file>..." to update what will be committed)
  (use "git restore <file>..." 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 –soft

Mirip dengan mixed, menghapus snapshot commit, perubahan pada file tidak dibuang. Perbedaan dengan mixed adalah, file berada pada fase staged.

Untuk menghapus perubahan secara permanent, perlu diikuti perintah git reset . dan git checkout.

Pertama kita log dahulu history commit

$ git log --oneline
3d53c8b (HEAD -> main) Revert "add paragraph"
728a836 add javascript
7e28c39 add paragraph
c38b6b5 adding h1
7dcdd7e adding css
ed85391 layout dasar

Contoh kita akan hapus id 3d53c8b dan 728a836, maka gunakan perintah berikut

$ git reset --soft 7e28c39

Jika kita cek log history

$ git log --oneline       
7e28c39 (HEAD -> main) add paragraph
c38b6b5 adding h1
7dcdd7e adding css
ed85391 layout dasar

Commit sudah dihapus dari history. Sama seperti parameter mixed, dan perubahan tidak dilakukan pada file. Jika kita periksa status:

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." 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 .

paremeter –hard

Akan menghapus snapshot commit dan perubahan pada file secara otomatis. Tidak perlu melakukan perintah lanjutan untuk melakukan penghapusan secara permanent.

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

$ git log --oneline
7e28c39 (HEAD -> main) add paragraph
c38b6b5 adding h1
7dcdd7e adding css
ed85391 layout dasar

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

$ git reset --hard ed85391

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

Sharing is caring:

Leave a Comment