Jika git pull gagal saat proyek Mac Anda tampak bersih, pertama-tama identifikasi pesan kesalahan yang tepat: Git mungkin sedang melindungi berkas lokal atau berkas yang diabaikan, menyembunyikan perubahan submodule, atau menolak menggabungkan riwayat cabang yang divergen. Di Terminal, periksa status lengkap repositori dan pelacakan cabang sebelum mengubah berkas atau memilih perilaku merge atau rebase.

Mulai dari repositori dan dapatkan kesalahan yang sebenarnya

Buka Terminal, masuk ke folder proyek, dan jalankan kembali pull hanya jika Anda perlu mereproduksi pesan tersebut. Terminal menggunakan zsh secara default pada macOS saat ini, dan perintah di bawah yang berada dalam tanda kutip berfungsi di zsh dan bash. Panduan Terminal Apple

cd "/path/to/your/project"
git status --short --branch
git pull

Ganti jalur di dalam tanda kutip dengan folder proyek Anda yang sebenarnya. Baca pesan kesalahan pull secara lengkap. “Your local changes … would be overwritten” mengindikasikan adanya halangan pada tingkat berkas. “Divergent branches” atau “Not possible to fast-forward” berarti riwayat komit lokal dan upstream memerlukan pilihan rekonsiliasi. Masalah-masalah ini mungkin terlihat serupa pada klien grafis, tetapi memerlukan langkah penanganan yang berbeda.

Cari berkas yang tersembunyi oleh tampilan status ringkas

Tampilan status yang singkat dapat menghilangkan detail-detail penting. Jalankan pemeriksaan baca-saja yang lebih lengkap:

git status --untracked-files=all --ignored=matching --ignore-submodules=none
git diff --
git diff --cached --

git status biasanya melaporkan berkas yang tidak terlacak (untracked), tetapi pengaturan lokal dapat menyembunyikannya; --untracked-files=all mencantumkan masing-masing berkas di dalam folder yang tidak terlacak. Berkas yang diabaikan akan dikecualikan kecuali jika diminta, sehingga --ignored=matching menampilkan jalur yang diabaikan yang cocok dengan aturan pengabaian (ignore rules). --ignore-submodules=none meminta status untuk melaporkan perubahan submodule bahkan jika konfigurasi sebaliknya menyembunyikannya. Git mendokumentasikan mode status ini dan mencatat bahwa jalur yang diabaikan menerima penanda status yang berbeda. Dokumentasi Git status

Kedua perintah git diff tersebut masing-masing menampilkan pengeditan pohon kerja yang terlacak dan perubahan yang telah di-stage. Perintah ini tidak mencantumkan konten berkas yang diabaikan atau tidak terlacak. Oleh karena itu, hasil yang “bersih” dari GUI, folder lain, atau tampilan status yang difilter tidak memastikan bahwa setiap halangan terlihat; gunakan Terminal di repositori yang sama dan periksa jalur persis yang disebutkan oleh Git. Aturan pengabaian sengaja menyembunyikan berkas tak terlacak yang cocok agar tidak muncul di keluaran status biasa. Dokumentasi Git ignore

Jika jalur yang dilaporkan diabaikan atau tidak terlacak, periksa terlebih dahulu sebelum memindahkan atau menghapusnya. Jangan menjalankan git clean, git reset --hard, atau menimpa jalur tersebut sebagai jalan pintas diagnostik: perintah-perintah ini dapat menghapus pekerjaan atau berkas lokal. Jika berkas tersebut berisi sesuatu yang Anda perlukan, buat salinan terpisah atau amankan dengan cara lain sebelum menyelesaikan benturan (collision) tersebut.

Periksa submodule dan flag indeks

Repositori dengan submodule dapat terlihat bersih di tingkat teratasnya sementara submodule memiliki editan lokal, berkas tak terlacak, atau komit yang di-checkout berbeda. Perintah status yang diperluas di atas meminta Git untuk tidak mengabaikan status submodule. Anda juga dapat masuk ke direktori submodule yang disebutkan dan menjalankan git status --untracked-files=all di sana; setiap submodule memiliki pohon kerja dan statusnya sendiri.

Untuk kasus yang lebih jarang terjadi, indeks Git dapat memuat flag yang memengaruhi cara penanganan jalur. assume-unchanged memberi tahu Git untuk mengasumsikan suatu berkas cocok dengan indeks, dan skip-worktree dapat mencegah pembaruan jalur selama operasi seperti pull. Periksa entri yang tidak biasa dengan:

git ls-files -v

Perintah ini mencantumkan jalur yang terlacak beserta tag indeksnya; tag huruf kecil dapat menunjukkan entri assume-unchanged, sedangkan S menunjukkan skip-worktree. Perlakukan ini sebagai petunjuk pemeriksaan, bukan perintah pembersihan. Jangan menghapus flag secara membabi buta di seluruh repositori; jika ada jalur terdampak yang disebutkan, periksa isinya dan penyiapan sparse-checkout proyek sebelum mengubah status indeksnya. Dokumentasi Git update-index

Jika pesannya mengenai cabang yang divergen

Pohon kerja yang bersih tidak berarti cabang lokal Anda dan upstream-nya memiliki riwayat yang sama. Periksa cabang mana yang sedang di-checkout dan apa yang dilacaknya:

git branch --show-current
git branch -vv
git status --short --branch

Keluaran status dan cabang dapat menunjukkan apakah cabang lokal berada di depan (ahead), di belakang (behind), atau divergen dari upstream-nya. Git pull terlebih dahulu mengambil (fetch) perubahan jarak jauh dan kemudian mengintegrasikan upstream yang dikonfigurasi. Perilaku bawaan fast-forward-only akan berhenti ketika cabang lokal dan jarak jauh telah divergen; ini adalah kebijakan riwayat, bukan bukti adanya perubahan berkas yang belum dikomit. Dokumentasi Git pull

Jika terdapat komit lokal, pilih metode yang sesuai dengan aturan kolaborasi proyek: rebase menerapkan kembali komit lokal di atas upstream, sedangkan merge menggabungkan riwayat dan dapat membuat komit merge. Tanyakan kepada pengelola repositori atau ikuti konvensi tim jika Anda tidak yakin. Hindari menyetel preferensi pull global atau melakukan force-reset pada cabang hanya untuk menghilangkan pesan kesalahan; tidak satu pun dari cara itu yang menjelaskan apa yang seharusnya terjadi pada komit-komit tersebut.

Gunakan pesan kesalahan untuk menentukan langkah pemeriksaan berikutnya

Benturan berkas mengharuskan Anda memeriksa jalur yang disebutkan, termasuk berkas yang diabaikan dan submodule. Pesan divergensi mengharuskan Anda memeriksa riwayat cabang dan memutuskan cara mengintegrasikan komit. Jika status tetap bersih tetapi kesalahan menyebutkan suatu jalur, pastikan Terminal berada di checkout yang diharapkan, periksa jalur tersebut secara langsung, dan periksa flag indeks yang relevan. Pesan yang tepat adalah diagnostik yang paling berguna: pertahankan berkas dan komit lokal sampai Anda memahami jenis penolakan apa yang dilaporkan oleh Git.

Sumber