Di Mac Anda, buka Terminal, buka repositori, lalu jalankan git status -sb. Jika cabang saat ini menampilkan ahead 1 (atau angka positif lainnya) relatif terhadap upstream-nya, berarti ada komit lokal yang tidak terwakili oleh remote-tracking branch yang dibandingkan oleh Git. Lakukan fetch terlebih dahulu untuk menyegarkan perbandingan tersebut, lalu buat daftar komit tertentu. Ini memeriksa riwayat yang telah dikomit; pengeditan yang belum dikomit merupakan jenis perubahan lokal yang berbeda.
Periksa cabang saat ini terhadap remote-tracking branch-nya
Di Terminal, berpindahlah ke folder proyek. Anda dapat mengetik cd , menyeret folder dari Finder ke jendela Terminal, lalu menekan Return. Jalankan:
git status -sb
Hasil seperti ## main...origin/main [ahead 2] berarti main lokal memiliki dua komit lebih maju dari upstream yang dikonfigurasikan, origin/main, berdasarkan status remote terakhir yang dicatat Git. [behind 1] berarti cabang remote yang dilacak memiliki satu komit yang tidak ada di lokal. Jika kedua hitungan muncul, cabang tersebut telah bercabang (diverged). Dokumentasi Git menyatakan bahwa status dapat menampilkan hitungan ahead dan behind saat upstream telah diatur dan tersedia untuk dibandingkan. Dokumentasi Git status
Untuk status lengkap, gunakan git status. Perintah ini juga melaporkan perubahan di working tree dan staging area. Berkas yang dimodifikasi atau tidak terlacak (untracked) tersebut bukanlah bukti adanya komit yang belum di-push: berkas-berkas tersebut belum menjadi komit. Working tree yang bersih masih bisa memiliki komit yang belum di-push, dan yang kotor (dirty) bisa saja tidak memiliki komit yang belum di-push sama sekali.
Segarkan perbandingan, lalu periksa komitnya
Nama origin/main adalah referensi remote-tracking lokal; ini bukanlah tampilan langsung dari server. Jalankan fetch untuk memperbarui referensi dari remote yang dikonfigurasi, lalu periksa statusnya lagi:
git fetch
git status -sb
git fetch memperbarui informasi remote-tracking tanpa menggabungkan (merge) perubahan yang di-fetch tersebut ke cabang Anda saat ini. Perintah ini tidak melakukan push terhadap komit lokal. Fetch dapat gagal jika remote tidak dapat dijangkau atau autentikasi tidak tersedia; dalam kasus tersebut, perbandingan lama tidak dapat memberi tahu Anda apa yang ada di server saat ini. Dokumentasi Git fetch
Jika status menunjukkan cabang berada di posisi ahead dan memiliki upstream, tampilkan komit yang dapat dijangkau dari cabang Anda saat ini tetapi tidak dari upstream tersebut:
git log --oneline '@{u}..HEAD'
Setiap baris keluaran adalah sebuah komit; baris pertama adalah yang terbaru dalam rentang tersebut. Hasil yang kosong berarti Git tidak menemukan komit dalam rentang itu. Singkatan @{u} berarti upstream yang dikonfigurasi untuk cabang saat ini, dan rentang dua titik memilih komit yang dapat dijangkau dari HEAD tetapi bukan dari upstream. Dokumentasi Git revisions
Misalnya, jika status menyatakan [ahead 2] dan log mencantumkan dua subjek komit, itulah komit yang secara lokal berada lebih maju dari cabang yang dilacak. Ini adalah konfirmasi yang berguna sebelum memutuskan apakah Anda berniat untuk melakukan push. Perintah ini sendiri tidak mengirimkan apa pun.
Jika Git tidak dapat membandingkan cabang
Jika git status -sb tidak menampilkan hitungan ahead/behind, cabang tersebut mungkin tidak memiliki upstream yang dikonfigurasi. Jalankan:
git branch -vv
Cabang saat ini ditandai dengan *; teks dalam tanda kurung siku, jika ada, mengidentifikasi upstream dan hitungan perbedaannya (divergence). Jika tidak ada upstream yang ditampilkan, Git tidak memiliki referensi pelacakan yang biasa digunakan untuk perbandingan ini. git remote -v dapat menampilkan nama remote dan URL yang dikonfigurasi, tetapi tidak menetapkan cabang remote mana yang menjadi tujuan yang diinginkan. Dokumentasi Git menyebutkan bahwa upstream adalah pengaturan cabang opsional yang digunakan oleh perintah seperti status. Dokumentasi Git pull
Hindari menebak origin/main: cabang Anda bisa saja melacak cabang dengan nama berbeda atau remote yang berbeda. Jika Anda mengetahui cabang remote yang dituju, bandingkan secara eksplisit setelah melakukan fetch, dengan mengganti origin/main dengan nama sebenarnya:
git log --oneline origin/main..HEAD
Ini mencantumkan komit yang ada di HEAD Anda saat ini tetapi tidak ada dalam referensi tersebut. Jika tujuannya tidak pasti, periksa konfigurasi cabang dan remote sebelum menganggap hasilnya sebagai pratinjau push. Git mengizinkan tujuan push yang dikonfigurasi berbeda dari upstream yang digunakan untuk perbandingan. Dokumentasi Git revisions
Apa yang dipastikan dan tidak dipastikan oleh pemeriksaan ini
Perbandingan ini hanya seakurat fetch terakhir yang berhasil. Orang lain dapat melakukan push komit baru setelah fetch Anda, atau server dapat berubah sebelum Anda melakukan push. Fetch yang berhasil memberi Git referensi yang lebih segar; hal ini tidak menjamin bahwa push berikutnya akan berhasil. Begitu pula, komit yang tidak ada di origin/main belum tentu tidak ada di setiap remote atau cabang.
Ketika Anda telah mengonfirmasi tujuan yang diinginkan dan ingin mengirim komit tersebut, gunakan perintah push yang sesuai dengan konfigurasi cabang dan remote repositori Anda. Jika Git melaporkan bahwa tidak ada upstream yang dikonfigurasi, Git mungkin memerlukan remote dan cabang yang eksplisit; periksa tujuannya dengan saksama sebelum melakukan push. Langkah-langkah di atas mengidentifikasi riwayat lokal versus yang dilacak sehingga Anda dapat membuat keputusan tersebut tanpa membingungkan pengeditan berkas yang belum dikomit dengan komit.
Sumber
Dokumentasi Git status — Git
Dokumentasi Git fetch — Git
Dokumentasi Git pull — Git