Cara Mengubah Commit Terakhir di Git dengan git commit --amend

pindipin
31 August 2026
11 min read
Cara Mengubah Commit Terakhir di Git dengan git commit --amend

Baru saja commit di branch feature/export-user, lalu kamu menyadari ada typo di commit message: "feat: tambah valiadasi email" — seharusnya "validasi". Atau skenario yang lebih sering: setelah commit, ternyata ada satu file yang lupa kamu git add — misalnya config/services.php yang berisi konfigurasi export. Mau bikin commit baru "fix typo"? History jadi berantakan. Commit yang isinya cuma perbaikan satu huruf atau satu file terlupa jelas mengotori riwayat project.

Solusinya ada di satu perintah: git commit --amend. Perintah ini mengganti commit terakhir dengan versi yang diperbaiki — tanpa membuat commit tambahan.

Poin penting yang perlu kamu pahami sejak awal: amend mengganti commit, bukan mengedit di tempat. Git membuat commit baru dengan SHA berbeda dan commit lama menjadi dangling object. Konsep ini sama dengan prinsip di artikel Git Reset vs Git Revert — amend juga menulis ulang history, hanya lebih ringkas karena terbatas pada commit terakhir.


Apa Itu git commit --amend?

git commit --amend membuat commit baru yang menggantikan tip branch saat ini. Commit baru memiliki parent yang sama dengan commit asli, tree yang sama atau diperbarui (jika ada staged changes), dan pesan yang bisa kamu ubah.

Dari dokumentasi resmi Git:

Replace the tip of the current branch by creating a new commit.

Di balik layar, amend setara dengan menjalankan git reset --soft HEAD^ lalu git commit -c ORIG_HEAD — tapi jauh lebih simpel karena cukup satu perintah. Kamu tidak perlu melakukan reset manual.

Perilaku amend tergantung kondisi staging area:

Tanpa staged changes — amend hanya mengubah pesan commit; metadata committer ikut diperbarui, tapi author dipertahankan (kecuali kamu memakai --reset-author, yang akan kita bahas sebentar lagi). Tree (isi file) tetap sama. Git tetap membuat commit baru dengan SHA baru, meskipun isi file-nya identik. Jadi kalau kamu amend tanpa menambah file apa pun, git log --oneline akan menunjukkan SHA baru dengan pesan yang sudah diperbarui.

Dengan staged changes — perubahan yang sudah di-git add "dilipat" ke dalam commit amended. Tidak ada commit terpisah untuk perubahan itu. Satu commit, satu SHA, satu catatan di log.

git commit --amend
git commit --amend -m "pesan baru"
git commit --amend --no-edit

Variasi Perintah yang Sering Dipakai

Mengubah Pesan Commit

Cara paling langsung: buka editor dengan pesan lama, edit, lalu simpan.

git commit --amend

Git akan membuka editor (biasanya Vim atau Nano tergantung config) dengan commit message yang sudah ada. Tinggal perbaiki, save, dan amend selesai.

Kalau mau lebih cepat dan tidak mau membuka editor:

git commit --amend -m "feat: tambah validasi email"

Flag -m mengganti seluruh pesan langsung dari command line. Praktis untuk fix typo atau perubahan kecil pada pesan. Perlu diingat: -m menimpa semua isi pesan lama, jadi pastikan pesan baru lengkap.

Menambah File yang Terlupa

git add app/Http/Controllers/UserExportController.php
git commit --amend --no-edit

--no-edit mempertahankan pesan commit tanpa membuka editor. File yang baru di-git add masuk ke commit terakhir, pesan tetap sama. Ini solusi paling rapi untuk situasi lupa stage satu file.

Fold Perubahan Kecil

git add -A
git commit --amend --no-edit

Semua perubahan staged dilipat ke commit terakhir. Ini berguna untuk perbaikan kecil yang masih relevan dengan commit terakhir — misalnya mengedit spacing, menambahkan docblock, atau fix PSR-12 style setelah commit sebelumnya. Kalau perubahan tidak berhubungan dengan commit terakhir, lebih baik bikin commit baru.

Melewati Git Hooks

git commit --amend --no-verify

--no-verify melewati hook pre-commit dan commit-msg. Misalnya, jika hook lint belum dikonfigurasi untuk mengenali amend, kamu bisa skip sementara. Tapi gunakan ini dengan sadar — hooks ada untuk alasan, dan melewati hook artinya kamu memikul tanggung jawab sendiri untuk memastikan kualitas commit.

Mengubah Author

git commit --amend --reset-author

--reset-author mengganti informasi author menjadi committer saat ini dan memperbarui author timestamp ke waktu sekarang. Berguna saat commit dibuat di mesin atau akun yang salah — misalnya kamu commit di laptop teman pakai akun dia, lalu ingin mengklaim authorship.


Apa yang Berubah dan Apa yang Tidak

Memahami apa yang berubah saat amend membantu kamu menggunakan perintah ini dengan percaya diri.

Yang Berubah

AspekStatus
SHA/Hash commitBERUBAH — commit baru selalu mendapat SHA baru
Committer timestampBERUBAH — diperbarui ke waktu amend dijalankan
Committer name/emailBERUBAH — dari config atau environment saat ini
Parent commitTIDAK BERUBAH — tetap sama dengan commit asli

Yang Tidak Berubah (Default)

AspekStatus
Author timestampTidak berubah kecuali pakai --reset-author
Author name/emailTidak berubah kecuali pakai --reset-author atau --author
Tree (isi file)Tidak berubah jika tidak ada staged changes baru

Tentang author timestamp: Tanpa --reset-author, amend mempertahankan author date asli. Ini benar secara historis — waktu penulisan kode tetap tercatat. Kalau kamu amend hanya untuk fix typo di pesan, author date tetap menunjukkan kapan kodenya ditulis.

Tentang committer timestamp: Selalu baru. Karena amend membuat commit baru, Git mengisi committer info dari environment saat ini — waktu amend dijalankan.

Perbedaan ini bisa kamu lihat sendiri:

git log --format=fuller -1

Output akan menampilkan kedua timestamp secara terpisah, sehingga kamu bisa melihat kapan kode ditulis (author date) dan kapan commit di-amend (committer date).


Golden Rule: Jangan Amend Commit yang Sudah Di-push

Ini aturan paling penting dalam seluruh artikel ini.

Hanya amend commit yang masih lokal — belum di-push ke remote.

Alasannya sederhana: amend mengganti commit lama (SHA lama) dengan commit baru (SHA baru). Jika commit lama sudah di-push dan di-git pull oleh teammate, mereka punya versi yang berbeda dari yang kamu punya sekarang. History-nya divergen.

Dari dokumentasi resmi:

Only amend commits that are still local and have not been pushed somewhere. Amending previously pushed commits and force pushing the branch will cause problems for your collaborators.

Untuk memeriksa, jalankan:

git log --oneline origin/main..HEAD

Kalau commit yang akan di-amend muncul di output, jangan amend. Cari alternatif lain.

Alternatif untuk Commit yang Sudah Di-push

Buat commit baru — paling sederhana. Commit perbaikan di atas commit lama, dan history tetap rapi:

git commit -m "fix: koreksi validasi email"

Gunakan git revert — membuat commit baru yang membalikkan perubahan. Lebih aman untuk branch bersama karena tidak menulis ulang history. Penjelasan lengkap ada di artikel Git Reset vs Git Revert.

Gunakan git reset --soft + commit ulang — hanya jika kamu satu-satunya yang bekerja di branch ini. Reset memang menulis ulang history, jadi pastikan tidak ada yang sudah mengambil commit tersebut. Ini sejalan dengan prinsip di reset vs revert: reset untuk commit lokal, revert untuk commit yang sudah shared.


Pemulihan: Bagaimana Jika Terlanjur Amend?

Amend tidak menghapus commit lama secara permanen. Commit yang tergantikan menjadi dangling object — ada di repository tapi tidak terhubung ke branch mana pun.

Reflog adalah jaring pengamannya. Git menyimpan log semua pergerakan HEAD di .git/logs/, dan reflog menunjukkan commit sebelum amend.

git reflog

Cari entri sebelum amend — biasanya HEAD@{1}. Lalu kembalikan ke posisi itu:

git reset --hard HEAD@{1}

Atau langsung pakai SHA commit lama:

git reset --hard abc1234

Beberapa hal tentang reflog yang perlu kamu ketahui:

  • Bersifat lokal. Reflog tidak pernah ikut ke remote. Kalau kamu bekerja di mesin lain, reflog di sana mandiri.
  • Ada batas waktu. Reflog kadaluarsa setelah 90 hari untuk commit yang masih reachable, dan 30 hari untuk unreachable. Setelah itu, git gc bisa membersihkan commit secara permanen.
  • Tidak menyimpan perubahan unstaged. File yang belum pernah di-git add kehilangan jejaknya dari reflog.

Intinya: reflog menyelamatkan, tapi bukan alasan untuk amend secara sembarangan.


Amend vs Alat Lain

Amend vs git reset --soft + commit

git reset --soft HEAD~1 + git commit -m "pesan baru" menghasilkan sesuatu yang mirip dengan amend. Keduanya sama-sama membuat commit baru dengan parent yang sama dengan commit lama. Perbedaan praktisnya tipis: amend otomatis memakai ulang pesan commit yang lama (kamu hanya tinggal menyuntingnya), sedangkan reset + commit mengharuskan kamu menulis pesan dari awal. Amend lebih simpel (satu perintah); reset memberikan kontrol lebih karena kamu bisa menyusun ulang staging area sebelum commit — cocok untuk situasi kompleks seperti memecah satu commit menjadi beberapa.

Amend vs git rebase -i

Amend hanya bekerja untuk commit terakhir (HEAD). Kalau kamu perlu mengubah commit yang lebih tua dari itu, git rebase -i adalah jawabannya.

git rebase -i HEAD~3

Ini membuka editor interaktif di mana kamu bisa menandai commit untuk diubah:

TandaFungsi
rewordGunakan commit, tapi edit pesan
editGunakan commit, tapi berhenti untuk amend
squashGabung dengan commit sebelumnya, pesan digabung
fixupGabung dengan commit sebelumnya, buang pesan commit ini

reword untuk ganti pesan, edit untuk amend konten, squash untuk menggabungkan, fixup seperti squash tapi tanpa pesan commit sebelumnya. Detail lengkap tentang interactive rebase ada di Pro Git Book, Bab 7.6.

Amend vs git revert

Revert membuat commit baru yang membalikkan perubahan tanpa mengubah history — aman untuk branch bersama. Amend menulis ulang history — hanya untuk commit lokal. Kalau commit sudah di-push ke branch yang dipakai tim, revert adalah pilihan yang tepat.


Skenario Praktis untuk Developer PHP/Laravel

Fix Typo di Commit Message

# Sebelum: "feat: tambah valiadasi email"
git commit --amend -m "feat: tambah validasi email"

Satu command, selesai. Tidak ada commit "fix typo" yang mengotori log.

File Config Terlupa

git add config/services.php
git commit --amend --no-edit

config/services.php masuk ke commit terakhir tanpa mengubah pesan. Seolah-olah kamu memang sudah stage file itu sebelum commit.

Fix Setelah Commit

Kamu baru commit, belum sempat test, ternyata ada bug kecil di controller. Perbaiki, lalu fold ke commit yang sama:

# fix code di sini...
git add app/Http/Controllers/UserExportController.php
git commit --amend --no-edit
git push origin feature/export-user

Commit yang rapi sampai ke remote — tidak ada commit perbaikan yang terpisah.

Perbaiki Konvensi Pesan

# Sebelum: "update user controller"
git commit --amend -m "feat: tambah method export user"

Sekarang sesuai konvensi: prefix yang benar (feat:) dan imperative tense.

Tambah Co-author

git commit --amend --no-edit --trailer "Co-authored-by: Budi <budi@example.com>"

Trailer co-author ditambahkan tanpa mengubah isi pesan commit. Berguna untuk menandai pair programming atau review contribution.


Kesalahan Umum yang Harus Dihindari

Amend di shared branch lalu force push. Ini resep bencana. History rewrite, teammates bingung, pull jadi konflik massal. Selalu cek dulu: git log --oneline origin/main..HEAD.

Mengira amend "mengedit" commit. Amend mengganti total. Commit lama menjadi dangling, commit baru SHA berbeda. Kalau kamu melihat git log --oneline dan SHA-nya berubah setelah amend, itu perilaku yang benar — bukan error.

Pakai amend untuk commit yang bukan HEAD. Amend hanya bekerja untuk commit terakhir. Kalau kamu mau mengubah commit ke-3 dari belakang, amend tidak akan menjangkau situ. Gunakan git rebase -i HEAD~3.

Amend tanpa perubahan, bingung "kenapa tidak ada yang berubah". Amend tetap membuat commit baru — SHA berubah meskipun tree identik. Kalau kamu amend tanpa staged changes, yang berubah hanya pesan atau metadata, tapi commit object tetap baru.

Tidak tahu cara recovery. Reflog masih bisa menyelamatkan. Jangan panik kalau kamu merasa commit hilang — cek git reflog dulu.

Mengira --no-verify aman digunakan sembarangan. Hooks ada untuk alasan — linting, message format, test otomatis. Skip hanya saat kamu benar-benar tahu dampaknya.


Best Practices

Amend sebelum push. Manfaatkan amend untuk merapikan commit lokal sebelum push ke remote. Ini workflow yang wajar — banyak developer memanfaatkan amend untuk memastikan setiap commit yang sampai ke remote sudah bersih.

Gunakan --no-edit untuk fold file. Tidak perlu membuka editor hanya untuk menambah file ke commit terakhir.

Pakai -m untuk fix cepat. Lebih cepat daripada membuka editor untuk perubahan satu baris di pesan.

Cek git log --oneline origin/main..HEAD sebelum amend. Jika commit muncul di situ, jangan amend — buat commit baru saja. Ini prinsip yang sama dengan memilih antara reset dan revert: kalau history sudah shared, jangan menulis ulang.

Pahami --reset-author. Hanya pakai saat memang perlu update author — misalnya commit dibuat di mesin atau akun yang salah.

Biasakan amend untuk rapikan commit message. Sebelum push, pastikan pesan sesuai konvensi project: conventional commits, format yang konsisten, imperative tense.

Ingat reflog. Jika terlanjur amend dan perlu recovery, reflog masih menyimpan commit lama — asalkan belum di-gc.


Penutup

git commit --amend adalah alat sederhana tapi efektif untuk memperbaiki commit terakhir — mengganti pesan, menambah file terlupa, atau fold perubahan kecil tanpa membuat commit tambahan. Kuncinya tiga: amend hanya untuk commit lokal, amend mengganti (bukan edit di tempat), dan reflog adalah jaring pengaman kamu.

Kalau kamu butuh mengubah commit yang lebih tua dari yang terakhir, git rebase -i adalah jawabannya. Kalau commit sudah di-push ke branch bersama, pertimbangkan commit baru atau git revert sebagai alternatif.

Praktikkan langsung di repository lokal — amend sebuah commit, lalu lihat perbedaannya di git log --oneline dan git reflog. Semakin sering dipakai, semakin terasa manfaatnya saat harus merapikan history sebelum push. Untuk pendalaman, dokumentasi resmi git-commit dan bab Amending Your Last Commit di Pro Git Book adalah rujukan terbaik.

Bagikan Artikel:
Diskusi & Komentar

Fitur komentar belum diaktifkan oleh administrator.

Artikel Terkait

Selesai membaca? Kembali ke beranda untuk melihat artikel menarik lainnya.

Kembali ke Beranda