Mengatasi Error Git: Your Branch and 'origin/master' Have Diverged
Ketika bekerja dengan Git, Anda mungkin menghadapi error berikut saat mencoba melakukan push project:
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 3 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Pesan ini menunjukkan bahwa branch lokal (master
) Anda memiliki 1 commit yang belum di-push ke remote, sedangkan branch remote (origin/master
) memiliki 3 commit yang belum ditarik ke lokal. Berikut adalah langkah-langkah untuk mengatasi masalah ini berdasarkan pengalaman saya.
Kronologi Error
Saat mencoba menjalankan perintah:
git push -u origin master
Git memberikan error di atas. Langkah-langkah yang saya lakukan untuk mengatasi masalah ini adalah sebagai berikut:
Langkah 1: Menjalankan git pull
Saya mencoba menarik perubahan dari branch remote dengan perintah berikut:
git pull origin master
Namun, perintah ini menghasilkan pesan tambahan:
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
fatal: Need to specify how to reconcile divergent branches.
Langkah-Langkah Penyelesaian
Langkah 2: Mengecek Perbedaan Commit
Untuk memahami perbedaan antara branch lokal dan remote, saya menjalankan perintah berikut:
-
Melihat commit yang ada di remote tetapi tidak di lokal:
git log --oneline master..origin/master
Perintah ini menunjukkan commit yang ada di remote (
origin/master
) tetapi belum ditarik ke lokal (master
). -
Melihat commit yang ada di lokal tetapi tidak di remote:
git log --oneline origin/master..master
Perintah ini menunjukkan commit yang ada di lokal (
master
) tetapi belum di-push ke remote (origin/master
).
Langkah 3: Menarik Perubahan dengan Strategi Merge
Setelah memahami perbedaannya, saya memilih strategi merge untuk menarik perubahan dari remote tanpa melakukan rebase. Perintah yang dijalankan:
git pull --no-rebase origin master
Langkah ini berhasil menyelaraskan branch lokal dan remote tanpa mengubah sejarah commit lokal.
Langkah 4: Melakukan Push Perubahan ke Remote
Setelah menyelaraskan branch lokal dengan remote, saya melakukan push ke remote dengan perintah:
git push -u origin master
Penjelasan Strategi yang Digunakan
--no-rebase
: Strategi ini memastikan bahwa perubahan dari remote digabungkan ke lokal melalui merge, menjaga commit asli tetap utuh.-u
(set upstream): Perintah ini mengatur remote branch (origin/master
) sebagai branch upstream untuk branch lokal (master
).
Kesimpulan
Error "Your branch and 'origin/master' have diverged" terjadi karena branch lokal dan remote memiliki sejarah commit yang berbeda. Dengan langkah-langkah di atas, Anda dapat:
- Memahami perbedaan antara branch lokal dan remote.
- Menyelaraskan perubahan dengan strategi yang sesuai (merge, rebase, atau lainnya).
- Melakukan push tanpa konflik.
Jika Anda sering menghadapi masalah seperti ini, Anda dapat menetapkan strategi penggabungan default untuk repository Git Anda. Misalnya, untuk menggunakan merge secara default:
git config --global pull.rebase false