Ketika Git tidak dapat menggabungkan dua cabang secara otomatis, Git akan berhenti dan membiarkan perubahan yang saling bertentangan untuk Anda selaraskan. Di Mac, gunakan git status untuk menemukan berkas yang terdampak, bandingkan kedua versi, edit setiap konflik menjadi hasil gabungan yang matang, lalu lakukan stage dan selesaikan penggabungan (merge). Kuncinya adalah mempertahankan maksud dari kedua perubahan tersebut, bukan menerima satu pihak secara membabi buta atau berasumsi bahwa mempertahankan kedua blok akan menghasilkan kode yang berfungsi.

Konfirmasi operasi dan lindungi editan yang belum selesai

Buka Terminal atau terminal terintegrasi di editor Anda, masuk ke repositori, dan periksa statusnya:

cd "/path/to/repository"
git status

Gunakan jalur folder yang sebenarnya untuk menggantikan contoh tersebut. Status Git memberi tahu Anda berkas mana saja yang belum digabungkan dan apakah operasinya berupa merge, rebase, atau tindakan lainnya. Artikel ini membahas tentang merge. Untuk merge biasa, Git membiarkan cabang saat ini tetap di tempatnya sembari menunggu Anda menyelesaikan konflik; jalur yang berhasil digabungkan tanpa kendala sudah diperbarui, sedangkan jalur yang mengalami konflik perlu ditinjau. Dokumentasi git merge Git

Jika Anda memiliki pekerjaan yang belum di-commit dari sebelum proses merge, berhati-hatilah agar tidak menimpanya saat mengedit. Git mendokumentasikan git merge --abort sebagai cara untuk menghentikan merge, tetapi mencatat bahwa perintah ini mungkin tidak selalu dapat merekonstruksi perubahan belum di-commit yang sudah ada sebelumnya. Jika statusnya tidak jelas, simpan salinan terpisah dari editan lokal yang penting sebelum melanjutkan. Batalkan (abort) hanya jika Anda memang berniat menghentikan merge, dan periksa status yang dihasilkan setelahnya. Petunjuk konflik merge Git

Pahami setiap konflik sebagai dua usulan

Buka setiap berkas yang terdaftar di editor teks. Konflik teks biasanya ditandai seperti ini:

<<<<<<< HEAD
current branch version
=======
incoming branch version
>>>>>>> branch-name

Teks di atas ======= umumnya merupakan versi cabang saat ini; teks di bawahnya umumnya adalah cabang yang sedang digabungkan. Labelnya bisa bervariasi. Git mencatat leluhur bersama (common ancestor) dan kedua versi cabang dalam indeks, dan berkas kerja menampilkan hasil bertanda konflik untuk Anda edit. Dokumentasi merge Git

Perlakukan kedua bagian tersebut sebagai bukti dari perubahan yang dimaksudkan, bukan sebagai pilihan mutlak yang harus Anda terima secara utuh. Cari tahu apa yang sebenarnya ingin dicapai oleh masing-masing editan. Satu pihak mungkin menambahkan kondisi validasi sementara pihak lain mengubah nama ruas (field); mempertahankan keduanya bisa berarti menggabungkannya menjadi satu kondisi yang diperbarui. Untuk konflik tingkat berkas, seperti satu pihak menghapus berkas sementara pihak lain mengeditnya, tentukan apakah berkas tersebut harus tetap ada, dan jika ya, masukkan editan yang diperlukan. Jika tujuannya tidak terlihat jelas dari baris kode tersebut, periksa kode di sekitarnya atau tanyakan kepada pembuat perubahan tersebut sebelum memutuskan.

Hapus semua penanda konflik dan tulis versi akhir yang koheren. Jangan hanya membiarkan kedua blok berurutan kecuali memang itulah yang seharusnya dimuat oleh program atau dokumen tersebut. Mempertahankan keduanya dapat menduplikasi deklarasi, menimpa perilaku, atau membuat sintaksis menjadi tidak valid. Sebaliknya, memilih hanya satu blok dapat membuang pekerjaan berguna dari cabang lain. Resolusi yang tepat bergantung pada konteks berkas di sekitarnya dan tujuan dari setiap perubahan.

Tinjau dan lakukan stage pada berkas yang telah diselesaikan

Simpan berkas yang telah diedit, lalu periksa perubahannya. Untuk berkas yang berkonflik, git diff menampilkan pekerjaan resolusi konflik yang masih ada di pohon kerja (working tree) Anda. Periksa seluruh konteks di sekitarnya, bukan hanya baris yang ditandai. Cari sisa-sisa penanda dengan fungsi pencarian di editor Anda, atau gunakan perintah ini di repositori:

git grep -n -E '^(<<<<<<<|=======|>>>>>>>)'

Jika ditemukan kecocokan, tinjau terlebih dahulu: dokumentasi yang sah atau data uji (test fixture) bisa saja memuat string ini, jadi jangan menghapus kecocokan secara membabi buta. Setelah hasil berkas sudah benar, lakukan stage dengan memberikan jalurnya yang diapit tanda kutip ke git add, misalnya git add "Sources/Example.swift". Melakukan stage memberi tahu Git bahwa konflik pada berkas tersebut telah diselesaikan; ini tidak membuktikan bahwa hasilnya sudah benar. Petunjuk dari Git adalah mengedit setiap konflik, menambahkan jalur yang telah diselesaikan, lalu melakukan commit atau melanjutkan merge. Dokumentasi merge Git

Untuk alur kerja visual di Mac, Visual Studio Code mencantumkan berkas yang berkonflik di bawah Merge Changes pada Source Control. Buka berkas dan gunakan aksi konflik sebaris (inline) atau Open in Merge Editor untuk memeriksa sisi saat ini, sisi yang masuk, dan hasilnya. Aksi Accept Both Changes pada editor akan mempertahankan kedua bagian secara berurutan; tinjau berkas yang dihasilkan dan gabungkan atau sesuaikan isinya bila diperlukan. Simpan hasilnya dan lakukan stage pada berkas di Source Control. Kontrol ini merupakan bagian dari VS Code; editor lain mungkin menggunakan label atau fitur yang berbeda. Panduan konflik merge VS Code

Selesaikan penggabungan dan verifikasi hasilnya

Setelah menyelesaikan konflik dan melakukan stage pada setiap berkas yang bermasalah, periksa kembali statusnya:

git status
git diff --cached

Tinjau diff yang telah di-stage untuk memastikan kedua kontribusi yang dimaksudkan muncul dalam bentuk akhir yang masuk akal dan editan yang tidak terkait tidak ikut disertakan. Jalankan pemeriksaan proyek yang relevan jika tersedia; Git tidak dapat menentukan apakah logika yang digabungkan berjalan sebagaimana mestinya.

Untuk merge melalui baris perintah (command line), selesaikan operasi dengan git merge --continue (atau lakukan commit merge jika Git mengarahkan Anda untuk melakukannya). Perintah --continue milik Git akan memeriksa apakah merge sedang berlangsung sebelum membuat commit. Kemudian jalankan git status lagi untuk mengonfirmasi bahwa proses merge sudah tidak berlangsung. Jika Git melaporkan adanya konflik lain, selesaikan dan lakukan stage pada berkas-berkas tersebut juga. Petunjuk merge Git

Konflik diselesaikan dengan aman ketika berkas akhir secara cermat memperhitungkan pekerjaan yang dimaksudkan dari kedua cabang, diff yang di-stage cocok dengan hasil tersebut, dan proses merge telah selesai. Jika Anda tidak dapat menentukan apa tujuan sebenarnya dari perubahan salah satu pihak, berhentilah sejenak dan dapatkan konteks tersebut sebelum membuang atau menulis ulang kodenya.

Sumber