Skip to main content
Engineering Notes · February 2014

Membatalkan Push ke Remote Git Repository

Portrait of Komang Artha Yasa, technology leader, two decades building digital platforms across marketplaces, retail, logistics, fintech, and banking.

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.