Git Push Force: Cara Kerjanya dan Cara Menggunakannya dengan Aman
Pelajari bagaimana git push force menulis ulang riwayat branch, cara menggunakannya dengan aman, dan cara memulihkan commit tanpa mengganggu alur kerja tim.
Sebagai developer, Anda mungkin pernah mengalami ini: Anda baru menyadari ada masalah pada kode di commit terakhir. Untuk membatalkan kesalahan ini, Anda menjalankan beberapa perintah dan menulis ulang riwayat lokal. Saat Anda menjalankan git push --force untuk merapikan semuanya, rekan satu tim memberi tahu bahwa beberapa commit hilang atau pipeline Anda menghasilkan build yang gagal.
Dalam artikel ini, saya akan menjelaskan apa yang sebenarnya dilakukan oleh git push --force, kapan menggunakannya, dan bagaimana menghindari kesalahan. Jika Anda baru mulai menggunakan Git, saya menyarankan untuk mengikuti our Introduction to Git course to learn about version control. Also, I find the Git Cheat Sheet, which you can download, is a helpful reference because it has all the most common Git terminologies and commands.
Kapan Anda Mungkin Mengira Perlu git push --force
Misalnya Anda merapikan riwayat commit lokal sebelum mendorong pekerjaan Anda. Untuk menata riwayat commit sebelum melakukan merge, Anda menjalankan git rebase -i main. Semuanya terlihat sempurna secara lokal, jadi Anda mencoba memperbarui branch remote dengan git push sederhana. Namun alih-alih pesan sukses seperti biasa, Git menampilkan error.
Anda juga mungkin menemui situasi lain saat tanpa sengaja commit data sensitif, misalnya API key atau kata sandi, lalu mendorongnya ke remote. Setelah menulis ulang riwayat secara lokal untuk menghapus commit bermasalah, Anda mendapati push biasa tidak memperbarui repositori remote, dan data sensitifnya tetap ada. Anda justru mendapat pesan error.
![rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'origin'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.,
hint: 'git pull ...') before pushing again.Didukung oleh
Error "non-fast-forward" ini adalah jaring pengaman Git, sebuah peringatan bahwa ada sesuatu pada riwayat Anda yang tidak cocok dengan yang ada di server. Pada titik ini, menggoda sekali untuk menjalankan git push --force guna melewati error tersebut.
Itu mungkin baik-baik saja jika Anda satu-satunya yang mengerjakan branch tersebut. Namun, pada proyek bersama, tindakan ini mudah menimbulkan kebingungan atau menghapus pekerjaan orang lain.
Apa yang Sebenarnya Dilakukan git push --force
Biasanya, Git hanya mengizinkan Anda mendorong perubahan jika branch lokal Anda berisi semua yang sudah ada di remote, termasuk commit baru Anda. Namun, kadang Anda menulis ulang riwayat commit melalui git rebase,squashing, atau menghapus data sensitif. Saat melakukan ini, branch lokal Anda akan berbeda dari branch remote. Lalu ketika Anda mencoba mendorong commit baru, Git menampilkan error yang melindungi branch remote dari kehilangan pekerjaan.
Menggunakan git push --force memberi tahu Git untuk melewatkan pemeriksaan keamanan dan menimpa branch remote dengan isi branch lokal Anda.
Ini akan memperbarui branch main di remote agar sama dengan main lokal Anda dan menghapus commit apa pun yang tidak ada di branch lokal Anda.
Sekarang, bayangkan branch Git Anda seperti sebuah bab dalam buku bersama yang ditulis tim Anda. Push standar ibarat menambahkan paragraf baru di akhir bab. Namun, git push --force lebih kuat: ia mencabut bab yang sekarang dan menggantinya sepenuhnya dengan versi Anda.
Risiko menggunakan git push --force adalah kolaborator bisa kehilangan pekerjaan jika mereka mendasarkan perubahan pada commit yang baru saja Anda hapus. Pada bagian berikutnya, kita akan melihat langkah pencegahan saat bekerja dengan perintah --force.
Mengapa Ini Bisa Merusak Segalanya bagi Tim Anda
Jika Anda memaksa push perubahan ke branch bersama seperti main atau develop, Anda kemungkinan akan mengalami hal-hal berikut:
Branch lokal orang lain menjadi tidak sinkron: Jika rekan Anda telah menarik commit lama yang kini Anda hapus dari remote, riwayat lokal mereka tidak lagi cocok dengan server. Branch mereka akan mereferensikan commit yang telah "menghilang", menimbulkan kebingungan dan
Pull menghasilkan merge yang membingungkan atau error: Ketika seseorang mencoba git pull setelah Anda melakukan force push, Git tidak tahu cara menyelaraskan riwayat yang ditulis ulang dengan urutan commit lokal mereka. Ini sering berujung pada merge commit yang aneh, error yang membingungkan, atau situasi di mana rekan diminta untuk melakukan intervensi manual dengan git fetch, git reset, atau bahkan meng-kloning ulang branch.
Pipeline CI/CD bisa gagal: Pipeline sering mengandalkan hash commit yang konsisten dan riwayat linear. Force push dapat menyebabkan kegagalan pengujian, melakukan deploy kode yang salah, atau crash saat membangun ulang di commit usang.
Mari saya ilustrasikan: Anda berada di branch feature bersama rekan tim. Anda merapikan riwayat lokal, lalu menjalankan git push --force. Beberapa menit kemudian, rekan Anda mendorong perubahannya. Mereka melihat error di Git. Saat melakukan pull, mereka mendapat konflik merge dan riwayat commit yang berantakan. Sementara itu, pipeline CI Anda gagal karena commit yang hilang. Kini, rekan Anda membuang waktu untuk mengurai branch, dan deployment tertunda.
Satu force push memicu semua itu.
Opsi yang Lebih Aman: git push --force-with-lease
Untuk menghindari masalah seperti itu, saya menyarankan menggunakan git push --force-with-lease. Perintah ini menambahkan pemeriksaan keamanan saat mendorong ke branch remote untuk menghindari commit yang tidak terduga.
git push --force-with-lease origin mainDidukung oleh
Anggap --force-with-lease seperti "bertanya apakah aman sebelum terjun". Sebelum melakukan apa pun, Git memastikan tidak ada orang lain yang mengubah branch. Jika semuanya masih seperti terakhir Anda lihat, riwayat Anda diperbarui. Namun jika ada perubahan baru yang belum Anda ketahui, Git menghentikan Anda dan meminta untuk meninjau situasi terlebih dahulu. Dengan demikian, perintah ini akan selalu melindungi kolaborator dari penimpaan yang tidak disengaja.
Cara Memulihkan dari Force Push yang Buruk
Jika Anda kehilangan beberapa commit, jangan khawatir karena Anda masih bisa memulihkannya. Git selalu menyimpan catatan perubahan pada commit saat ini, termasuk penulisan ulang, dan menyimpannya di reflog.
Berikut cara Anda memulihkan commit yang hilang:
Langkah 1: Gunakan git reflog untuk menemukan commit yang hilang
Jalankan git reflog untuk melihat riwayat branch Anda.
Perlu diingat bahwa data reflog hanya ada di mesin lokal. Oleh karena itu, Anda mungkin tidak dapat memulihkan commit yang hilang jika tidak ada rekan tim yang menyimpannya di lingkungan lokal.
Saya merekomendasikan kursus Intermediate Git kami untuk mempelajari lebih lanjut tentang kolaborasi dan bekerja dengan branch di Git.
Praktik Terbaik untuk Menggunakan git push --force dengan Aman
Untuk mengurangi kemungkinan kerusakan, berikut beberapa kebiasaan baik yang perlu diikuti:
Lebih utamakan --force-with-lease daripada --force: Metode ini lebih aman karena memeriksa apakah branch remote tidak berubah sejak fetch terakhir Anda. Saya akan membantu melindungi rekan Anda dari penimpaan yang tidak disengaja.
Hindari force push ke branch bersama: Jangan pernah melakukan force push ke branch bersama seperti main, master, develop, atau branch release. Lakukan force push hanya ke branch feature Anda sendiri ketika Anda satu-satunya kontributor untuk menghindari gangguan.
Beri tahu tim Anda sebelum melakukan force push: Jika Anda harus melakukan force push ke branch bersama, beri tahu tim. Ini memungkinkan mereka menyimpan pekerjaan dan menghindari kehilangan.
Gunakan protected branch: Anda juga dapat mengaktifkan perlindungan untuk branch saat menggunakan platform seperti GitHub, GitLab, dan Bitbucket. Ini membatasi penyuntingan langsung dan mencegah force push yang tidak disengaja ke branch penting.
Jika Anda ingin mempelajari lebih lanjut tentang pengelolaan repo privat, lihat kursus Introduction to GitHub Concepts kami untuk memahami cara meninjau pull request saat berkolaborasi di GitHub.
Kesimpulan
git push --force menawarkan cara yang berguna untuk menulis ulang riwayat repo Anda, baik untuk merapikan commit maupun menghapus data sensitif. Selalu berhati-hati saat menggunakan perintah ini untuk menghindari rusaknya alur kerja tim Anda.
Sebisa mungkin, gunakan --force-with-lease. Opsi ini memberi Anda lebih banyak kendali tanpa mempertaruhkan pekerjaan orang lain. Dengan sedikit kehati-hatian dan komunikasi, Anda dapat menjaga riwayat Git tetap rapi tanpa menimbulkan masalah bagi tim.
Saya menyarankan Anda melihat jalur keahlian Git Fundamentals dan GitHub Foundations kami untuk menjadi ahli dalam semua hal tentang Git.
Penulis teknis Data Science dengan pengalaman langsung dalam analitik data, business intelligence, dan data science. Saya menulis konten praktis berfokus industri tentang SQL, Python, Power BI, Databricks, dan rekayasa data, yang berakar pada pekerjaan analitik dunia nyata. Tulisan saya menjembatani kedalaman teknis dan dampak bisnis, membantu para profesional mengubah data menjadi keputusan yang meyakinkan.
FAQs
Apa risiko menggunakan git push --force?⌄
Ini dapat menimpa commit di branch remote, menyebabkan rekan tim kehilangan pekerjaan atau mengalami konflik merge yang membingungkan.
Bagaimana cara aman menggunakan git push --force-with-lease?⌄
Gunakan git push --force-with-lease alih-alih --force untuk memastikan branch remote tidak berubah sejak fetch terakhir Anda, dan membantu mencegah penimpaan yang tidak disengaja.
Apa saja skenario ketika git push --force diperlukan?⌄
git push --force mungkin diperlukan saat Anda melakukan rebase commit lokal, menghapus data sensitif dari riwayat, atau merapikan riwayat commit sebelum menggabungkan branch fitur.
Bagaimana cara membatalkan git push --force yang saya sesali?⌄
Untuk membatalkan git push --force jalankan git reflog untuk menemukan commit sebelumnya, lalu pulihkan dengan checkout ke commit tersebut dan melakukan force push pada branch yang telah dikoreksi.
Apa praktik terbaik untuk menghindari kesalahan dengan git push --force?⌄
Gunakan --force-with-lease, hindari force push ke branch bersama, berkomunikasi dengan tim Anda, dan lindungi branch penting di platform hosting Git Anda.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Sebagai developer, Anda mungkin pernah mengalami ini: Anda baru menyadari ada masalah pada kode di commit terakhir. Untuk membatalkan kesalahan ini, Anda menjalankan beberapa perintah dan menulis ulang riwayat lokal. Saat Anda menjalankan
git push --forceuntuk merapikan semuanya, rekan satu tim memberi tahu bahwa beberapa commit hilang atau pipeline Anda menghasilkan build yang gagal.Dalam artikel ini, saya akan menjelaskan apa yang sebenarnya dilakukan oleh
git push --force, kapan menggunakannya, dan bagaimana menghindari kesalahan. Jika Anda baru mulai menggunakan Git, saya menyarankan untuk mengikuti our Introduction to Git course to learn about version control. Also, I find the Git Cheat Sheet, which you can download, is a helpful reference because it has all the most common Git terminologies and commands.Kapan Anda Mungkin Mengira Perlu git push --force
Misalnya Anda merapikan riwayat commit lokal sebelum mendorong pekerjaan Anda. Untuk menata riwayat commit sebelum melakukan merge, Anda menjalankan
git rebase -i main. Semuanya terlihat sempurna secara lokal, jadi Anda mencoba memperbarui branch remote dengan git push sederhana. Namun alih-alih pesan sukses seperti biasa, Git menampilkan error.Anda juga mungkin menemui situasi lain saat tanpa sengaja commit data sensitif, misalnya API key atau kata sandi, lalu mendorongnya ke remote. Setelah menulis ulang riwayat secara lokal untuk menghapus commit bermasalah, Anda mendapati push biasa tidak memperbarui repositori remote, dan data sensitifnya tetap ada. Anda justru mendapat pesan error.
Error "non-fast-forward" ini adalah jaring pengaman Git, sebuah peringatan bahwa ada sesuatu pada riwayat Anda yang tidak cocok dengan yang ada di server. Pada titik ini, menggoda sekali untuk menjalankan
git push --forceguna melewati error tersebut.Itu mungkin baik-baik saja jika Anda satu-satunya yang mengerjakan branch tersebut. Namun, pada proyek bersama, tindakan ini mudah menimbulkan kebingungan atau menghapus pekerjaan orang lain.
Apa yang Sebenarnya Dilakukan git push --force
Biasanya, Git hanya mengizinkan Anda mendorong perubahan jika branch lokal Anda berisi semua yang sudah ada di remote, termasuk commit baru Anda. Namun, kadang Anda menulis ulang riwayat commit melalui
git rebase, squashing, atau menghapus data sensitif. Saat melakukan ini, branch lokal Anda akan berbeda dari branch remote. Lalu ketika Anda mencoba mendorong commit baru, Git menampilkan error yang melindungi branch remote dari kehilangan pekerjaan.Menggunakan
git push --forcememberi tahu Git untuk melewatkan pemeriksaan keamanan dan menimpa branch remote dengan isi branch lokal Anda.Beginilah tampilannya:
Ini akan memperbarui branch main di remote agar sama dengan main lokal Anda dan menghapus commit apa pun yang tidak ada di branch lokal Anda.
Sekarang, bayangkan branch Git Anda seperti sebuah bab dalam buku bersama yang ditulis tim Anda. Push standar ibarat menambahkan paragraf baru di akhir bab. Namun,
git push --forcelebih kuat: ia mencabut bab yang sekarang dan menggantinya sepenuhnya dengan versi Anda.Risiko menggunakan
git push --forceadalah kolaborator bisa kehilangan pekerjaan jika mereka mendasarkan perubahan pada commit yang baru saja Anda hapus. Pada bagian berikutnya, kita akan melihat langkah pencegahan saat bekerja dengan perintah--force.Mengapa Ini Bisa Merusak Segalanya bagi Tim Anda
Jika Anda memaksa push perubahan ke branch bersama seperti
mainataudevelop, Anda kemungkinan akan mengalami hal-hal berikut:Lihat kursus CI/CD for Machine Learning kami untuk memahami cara membangun alur kerja CI/CD. Saya juga merekomendasikan kursus Introduction to Data Versioning with DVC untuk mempelajari perbedaan antara versioning data dan versioning kode.
Mari saya ilustrasikan: Anda berada di branch
featurebersama rekan tim. Anda merapikan riwayat lokal, lalu menjalankangit push --force. Beberapa menit kemudian, rekan Anda mendorong perubahannya. Mereka melihat error di Git. Saat melakukan pull, mereka mendapat konflik merge dan riwayat commit yang berantakan. Sementara itu, pipeline CI Anda gagal karena commit yang hilang. Kini, rekan Anda membuang waktu untuk mengurai branch, dan deployment tertunda.Satu force push memicu semua itu.
Opsi yang Lebih Aman: git push --force-with-lease
Untuk menghindari masalah seperti itu, saya menyarankan menggunakan
git push --force-with-lease. Perintah ini menambahkan pemeriksaan keamanan saat mendorong ke branch remote untuk menghindari commit yang tidak terduga.Anggap
--force-with-leaseseperti "bertanya apakah aman sebelum terjun". Sebelum melakukan apa pun, Git memastikan tidak ada orang lain yang mengubah branch. Jika semuanya masih seperti terakhir Anda lihat, riwayat Anda diperbarui. Namun jika ada perubahan baru yang belum Anda ketahui, Git menghentikan Anda dan meminta untuk meninjau situasi terlebih dahulu. Dengan demikian, perintah ini akan selalu melindungi kolaborator dari penimpaan yang tidak disengaja.Cara Memulihkan dari Force Push yang Buruk
Jika Anda kehilangan beberapa commit, jangan khawatir karena Anda masih bisa memulihkannya. Git selalu menyimpan catatan perubahan pada commit saat ini, termasuk penulisan ulang, dan menyimpannya di reflog.
Berikut cara Anda memulihkan commit yang hilang:
Langkah 1: Gunakan git reflog untuk menemukan commit yang hilang
Jalankan
git refloguntuk melihat riwayat branch Anda.Anda mungkin melihat commit seperti ini:
Langkah 2: Pulihkan commit yang hilang
Setelah Anda mengidentifikasi hash commit yang ingin dipulihkan, gunakan perintah di bawah ini untuk menuju ke branch spesifik.
Langkah 3: Buat branch baru
Untuk memulihkan file dengan aman, buat git branch baru.
Langkah 4: Pulihkan branch remote
Sekarang dorong commit yang sudah dipulihkan ke branch tersebut:
Perlu diingat bahwa data reflog hanya ada di mesin lokal. Oleh karena itu, Anda mungkin tidak dapat memulihkan commit yang hilang jika tidak ada rekan tim yang menyimpannya di lingkungan lokal.
Saya merekomendasikan kursus Intermediate Git kami untuk mempelajari lebih lanjut tentang kolaborasi dan bekerja dengan branch di Git.
Praktik Terbaik untuk Menggunakan git push --force dengan Aman
Untuk mengurangi kemungkinan kerusakan, berikut beberapa kebiasaan baik yang perlu diikuti:
Lebih utamakan --force-with-lease daripada --force: Metode ini lebih aman karena memeriksa apakah branch remote tidak berubah sejak fetch terakhir Anda. Saya akan membantu melindungi rekan Anda dari penimpaan yang tidak disengaja.
Hindari force push ke branch bersama: Jangan pernah melakukan force push ke branch bersama seperti
main,master,develop, atau branchrelease. Lakukan force push hanya ke branch feature Anda sendiri ketika Anda satu-satunya kontributor untuk menghindari gangguan.Beri tahu tim Anda sebelum melakukan force push: Jika Anda harus melakukan force push ke branch bersama, beri tahu tim. Ini memungkinkan mereka menyimpan pekerjaan dan menghindari kehilangan.
Gunakan protected branch: Anda juga dapat mengaktifkan perlindungan untuk branch saat menggunakan platform seperti GitHub, GitLab, dan Bitbucket. Ini membatasi penyuntingan langsung dan mencegah force push yang tidak disengaja ke branch penting.
Jika Anda ingin mempelajari lebih lanjut tentang pengelolaan repo privat, lihat kursus Introduction to GitHub Concepts kami untuk memahami cara meninjau pull request saat berkolaborasi di GitHub.
Kesimpulan
git push --forcemenawarkan cara yang berguna untuk menulis ulang riwayat repo Anda, baik untuk merapikan commit maupun menghapus data sensitif. Selalu berhati-hati saat menggunakan perintah ini untuk menghindari rusaknya alur kerja tim Anda.Sebisa mungkin, gunakan
--force-with-lease. Opsi ini memberi Anda lebih banyak kendali tanpa mempertaruhkan pekerjaan orang lain. Dengan sedikit kehati-hatian dan komunikasi, Anda dapat menjaga riwayat Git tetap rapi tanpa menimbulkan masalah bagi tim.Saya menyarankan Anda melihat jalur keahlian Git Fundamentals dan GitHub Foundations kami untuk menjadi ahli dalam semua hal tentang Git.