Memperbaiki Commit: amend & reset

Mengoreksi commit terakhir dengan --amend dan menggulung riwayat dengan git reset (--soft, --mixed, --hard).

Part 9 dari 22 ± 35 menit Gratis

Commit terakhir ada yang kurang

Baru saja commit, lalu sadar: pesannya typo, atau ada berkas yang lupa dimasukkan. Daripada membuat commit "perbaikan kecil", ganti saja commit terakhir:

git commit --amend -m "Pesan yang sudah benar"      # ubah pesan saja

echo "body{}" > style.css
git add style.css
git commit --amend --no-edit                          # tambah berkas, pesan tetap

--amend sebenarnya menggantikan commit terakhir dengan commit baru (hash berubah). Karena itu jangan pernah amend commit yang sudah di-push dan dipakai orang lain — riwayatnya jadi berbeda dan merepotkan tim.

git reset: memundurkan branch

git reset <commit> memindahkan ujung branch saat ini ke commit lain. Tiga mode menentukan apa yang terjadi pada staging dan working directory:

ModeBranch bergerakStagingWorking directory
--softYaTetap (perubahan tetap staged)Tetap
--mixed (default)YaDikosongkan (disamakan dengan commit tujuan)Tetap
--hardYaDikosongkanIkut dikembalikan — perubahan hilang

Kapan memakai yang mana

  • --soft: "gabungkan beberapa commit jadi satu". Mundur 3 commit lalu commit ulang satu kali — perubahan masih staged.
  • --mixed: "batalkan commit dan staging, tapi simpan edit" — untuk memecah commit yang terlalu besar menjadi beberapa.
  • --hard: "buang semuanya, kembali ke commit itu". Berbahaya untuk perubahan yang belum di-commit; commit yang "terbuang" masih bisa diselamatkan lewat reflog (bab 21).

Contoh: menggabungkan commit wip

Riwayat berantakan:

c3 wip lagi
c2 wip
c1 Tambah halaman utama
git reset --soft HEAD~2
git commit -m "Tambah halaman login"

Hasil: c1 tetap, dan dua commit wip menjadi satu commit rapi.

Aturan emas

Reset, amend, dan rebase menulis ulang riwayat. Aman dilakukan pada commit yang belum di-push (masih milikmu saja). Untuk commit yang sudah dibagikan, gunakan git revert (bab berikutnya).

git reset untuk berkas

git reset berkas (tanpa commit tujuan) = mengeluarkan berkas dari staging, sama dengan git restore --staged berkas.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X