Membatalkan Push ke Remote Git Repository

Pagi ini dimulai dengan seorang rekan yang melaporkan masalah — tanpa sengaja meng-push local commits yang belum teruji ke branch master di remote repository — dan minta tolong me-reset ke latest stable commit.
Soal successful branching model dan kenapa hal seperti ini sebaiknya tidak terjadi di tempat pertama, kita lewati dulu — itu topik post tersendiri. Yang dibutuhkan sekarang adalah resep enam baris.
git fetch
git checkout [branch]
git log -n [num]
git reset --hard [commit_hash]
git clean -f -x -d
git push --force origin [branch]
Apa yang Dilakukan Tiap Baris
git fetch— sinkronisasi ref dari remote tanpa mengubah working tree.git checkout [branch]— pindah ke branch yang akan di-reset.git log -n [num]— tampilkan[num]commit terakhir untuk mencari hash stable commit yang dituju.git reset --hard [commit_hash]— pindahkan tip branch lokal ke commit tersebut, sekaligus menyamakan working tree.git clean -f -x -d— hapus untracked files, termasuk yang di-ignore — biar working tree benar-benar bersih.git push --force origin [branch]— push ulang ke remote dengan force, menimpa state remote dengan state lokal.
Catatan: --force menulis ulang sejarah remote. Aman jika branch ini hanya dipakai sendiri atau seluruh tim sudah diberi tahu. Kalau ada orang lain yang sudah pull commit yang akan dibuang, force-push akan menyebabkan divergensi yang mereka harus selesaikan secara manual.
That’s it. Thanks, git.
