Mengatasi konflik terkait penggabungan

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Saat menggabungkan atau melakukan rebase, Anda memberi tahu Git untuk mengintegrasikan perubahan yang dilakukan pada satu cabang dengan perubahan yang dibuat di cabang lain. Sering kali, Git menyelesaikan penggabungan atau rebase secara otomatis tanpa bantuan Anda. Namun, jika Git menemukan bahwa perubahan yang dilakukan pada satu cabang bertentangan dengan perubahan yang dilakukan pada cabang lain, itu meminta Anda untuk menyelesaikan konflik. Konflik penggabungan dapat terjadi ketika cabang gabungan mengedit baris file yang sama secara berbeda, atau ketika satu cabang memodifikasi file dan cabang lain menghapusnya. Proses untuk menyelesaikan konflik penggabungan berlaku untuk penggabungan Git dan rebase.

Anda dapat mengatasi konflik penggabungan di Visual Studio, atau dengan menggunakan baris perintah dan editor teks apa pun.

Untuk gambaran umum alur kerja Git, lihat tutorial Azure Repos Git.

Artikel ini menyediakan prosedur untuk tugas-tugas berikut:

  • Memahami konflik penggabungan
  • Mengatasi konflik terkait penggabungan

Memahami konflik penggabungan

Git gabungkan atau rebase mengintegrasikan penerapan dari cabang sumber ke cabang lokal Anda saat ini (cabang target). Penggabungan Git melakukan penggabungan maju cepat atau tidak cepat. Penggabungan tanpa penerusan cepat juga dikenal sebagai penggabungan tiga arah atau penggabungan sejati . Rebase Git adalah jenis penggabungan lain. Jenis penggabungan ini diperlihatkan dalam diagram berikut.

Diagram memperlihatkan penerapan sebelum dan sesudah saat menggunakan penggabungan Git dan rebase Git.

Untuk penggabungan Git, jika ujung cabang target ada di dalam cabang sumber, jenis penggabungan default akan menjadi penggabungan maju cepat. Jika tidak, jenis penggabungan default akan menjadi penggabungan tanpa penerusan cepat.

Penggabungan maju cepat tidak akan pernah memiliki konflik penggabungan karena Git tidak akan menerapkan penggabungan maju cepat jika ujung cabang target telah berbeda dari cabang sumber. Secara default, Git menggunakan penggabungan maju cepat jika memungkinkan. Misalnya, Git akan menerapkan penggabungan maju cepat pada cabang lokal yang hanya Anda perbarui dengan menarik dari cabang mitra jarak jauhnya.

Penggabungan tanpa penerusan cepat menghasilkan cabang target baru "gabungkan penerapan" yang mengintegrasikan perubahan cabang sumber dengan perubahan cabang target. Perubahan yang berlaku adalah yang dilakukan setelah penerapan terakhir yang umum untuk kedua cabang. Dalam diagram sebelumnya, penerapan C adalah penerapan umum terakhir di kedua cabang. Jika ada perubahan cabang sumber yang bertentangan dengan perubahan cabang target, maka Git akan meminta Anda untuk mengatasi konflik penggabungan. Penerapan penggabungan (L) berisi cabang sumber terintegrasi dan perubahan cabang target. Tips cabang sumber dan target (K dan E) adalah induk dari penerapan penggabungan. Dalam riwayat penerapan cabang Anda, penerapan penggabungan adalah penanda yang berguna untuk operasi penggabungan, dan dengan jelas menunjukkan cabang mana yang digabungkan.

Git rebase mengurutkan ulang riwayat penerapan cabang target sehingga berisi semua penerapan cabang sumber, diikuti oleh semua penerapan cabang target sejak penerapan umum terakhir. Dalam diagram sebelumnya, penerapan C adalah penerapan umum terakhir di kedua cabang. Cara lain untuk melihatnya adalah bahwa rebase memutar ulang perubahan di cabang target Anda di atas riwayat cabang sumber. Jika ada perubahan cabang sumber yang bertentangan dengan perubahan cabang target, maka Git akan meminta Anda untuk mengatasi konflik penggabungan. Seperti halnya penggabungan maju cepat, rebase tidak membuat penerapan penggabungan. Terutama, rebase mengubah urutan penerapan cabang target yang ada, yang bukan terjadi untuk strategi penggabungan lainnya. Dalam diagram sebelumnya, commit K' berisi perubahan yang sama dengan K, tetapi memiliki ID penerapan baru karena menautkan kembali ke penerapan E alih-alih C.

Git gabungkan dan rebase hanya ubah cabang target—cabang sumber tetap tidak berubah. Ketika Anda mengalami satu atau beberapa konflik penggabungan, Anda harus mengatasinya untuk menyelesaikan penggabungan atau rebase. Atau, Anda dapat membatalkan operasi penggabungan/rebase dan mengembalikan cabang target ke status sebelumnya.

Untuk informasi selengkapnya tentang opsi dan strategi penggabungan, lihat panduan referensi Git dan strategi penggabungan Git.

Kapan mengatasi konflik penggabungan

Penggabungan Git dan rebase Git banyak digunakan dalam alur kerja Git. Saat mengerjakan fitur lokal atau cabang bugfix, ini adalah praktik umum untuk:

  1. Pertahankan cabang lokal main Anda tetap terkini dengan mitra jarak jauhnya dengan secara berkala menarik untuk mengambil dan menggabungkan penerapan jarak jauh.
  2. Integrasikan pembaruan cabang lokal main ke cabang fitur lokal Anda menggunakan rebase atau penggabungan.
  3. Cadangkan pekerjaan Anda di cabang fitur lokal dengan mendorongnya ke cabang jarak jauh yang sesuai.
  4. Pada penyelesaian fitur, buat permintaan pull untuk menggabungkan cabang fitur jarak jauh Anda ke cabang jarak jauh main .

Dengan sering mengintegrasikan perubahan jarak jauh ke dalam repositori lokal Anda, Anda dapat tetap mengetahui pekerjaan terbaru oleh orang lain dan segera menyelesaikan konflik penggabungan yang muncul.

Mengatasi konflik terkait penggabungan

Proses untuk menyelesaikan konflik penggabungan berlaku untuk penggabungan Git dan rebase Git. Meskipun langkah-langkah berikut menjelaskan cara mengatasi konflik penggabungan selama penggabungan, Anda juga dapat mengatasi konflik penggabungan selama rebase.

Tip

Jika cabang sumber adalah cabang pelacakan jarak jauh, pastikan cabang sudah diperbarui dengan menjalankan pengambilan Git sebelum penggabungan. Atau, jalankan perintah pull Git, yang menggabungkan pengambilan Git dengan penggabungan Git.

Visual Studio 2022 menyediakan pengalaman kontrol versi Git dengan menggunakan menu Git, Perubahan Git, dan melalui menu konteks di Penjelajah Solusi. Visual Studio 2019 versi 16.8 juga menawarkan antarmuka pengguna Team Explorer Git. Untuk informasi selengkapnya, lihat tab Visual Studio 2019 - Team Explorer .

  1. Di panel Cabang jendela Repositori Git, lihat cabang target. Kemudian klik kanan cabang sumber dan pilih Gabungkan <cabang> sumber ke cabang <>target.

    Cuplikan layar opsi Gabungkan di menu konteks cabang di jendela Repositori Git visual Studio.

  2. Visual Studio akan memberi tahu Anda jika Git menghentikan penggabungan karena konflik. Dalam peristiwa itu, Anda dapat mengatasi konflik, atau membatalkan penggabungan dan kembali ke status pra-penggabungan. Bagian Perubahan Tidak Tergabung dari jendela Perubahan Git mencantumkan file dengan konflik penggabungan. Untuk file dengan konflik penggabungan dalam kontennya, klik dua kali file untuk membukanya di editor penggabungan.

    Cuplikan layar file dengan konflik penggabungan di jendela Perubahan Git Visual Studio.

  3. Di editor penggabungan, panel Masuk memperlihatkan versi file cabang sumber, panel Saat ini memperlihatkan versi file cabang target, dan panel Hasil memperlihatkan file gabungan yang dihasilkan. Untuk menerapkan perubahan cabang sumber atau target tertentu, pilih kotak centang di samping baris yang berkonflik yang ingin Anda simpan. Anda juga bisa langsung mengedit file gabungan di panel Hasil . Pilih Terima Gabung setelah Anda mengatasi semua konflik penggabungan dalam file saat ini. Ulangi langkah ini untuk setiap file dengan konflik konten.

    Cuplikan layar editor penggabungan di Visual Studio.

  4. Untuk file yang diedit di satu cabang dan dihapus di cabang lainnya, klik kanan file dan pilih tindakan cabang mana yang Anda inginkan.

    Cuplikan layar menu konteks untuk file yang berkonflik di jendela Perubahan Git Visual Studio.

  5. Di jendela Perubahan Git, masukkan pesan penerapan dan pilih Terapkan Ditahapkan untuk menyelesaikan penggabungan—setelah Anda menyelesaikan semua konflik penggabungan untuk semua file.

    Cuplikan layar pesan penerapan dan tombol Terapkan Bertahap di jendela Perubahan Git visual Studio.

Langkah berikutnya