Mengatasi konflik penggabungan
Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Saat Anda menggabungkan atau melakukan rebase, Anda memberi tahu Git untuk mengintegrasikan perubahan yang dibuat pada satu cabang dengan perubahan yang dibuat pada 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-konflik penggabungan berlaku untuk konflik 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.
Kategori | Persyaratan |
---|---|
Akses proyek | Anggota proyek . |
Izin | - Lihat kode dalam proyek privat: Setidaknya akses Dasar . - Mengkloning atau berkontribusi pada kode dalam proyek privat: Anggota kelompok keamanan Kontributor atau memiliki izin yang sesuai dalam proyek. - Atur izin cabang atau repositori: Kelola izin untuk cabang atau repositori. - Ubah cabang default: Sunting kebijakan izin untuk repositori. - Impor repositori: Anggota grup keamanan Administrator Proyek atau tingkat proyek Git dengan izin Buat repositori diatur ke Izinkan. Untuk informasi selengkapnya, lihat Mengatur izin repositori Git. |
Layanan | Repos diaktifkan. |
Alat | Fakultatif. Gunakan perintah az repos: Azure DevOps CLI. |
Catatan
Dalam proyek publik, pengguna dengan Stakeholder akses memiliki akses lengkap ke Azure Repos, termasuk melihat, mengkloning, dan berkontribusi terhadap kode.
Kategori | Persyaratan |
---|---|
Akses proyek | Anggota proyek . |
Izin | - Lihat kode: Setidaknya akses Dasar. - Mengkloning atau berkontribusi pada kode: Anggota kelompok keamanan Kontributor atau izin yang sesuai dalam proyek. |
Layanan | Repos diaktifkan. |
Git merge atau rebase mengintegrasikan commit dari cabang sumber ke cabang lokal Anda saat ini (cabang target). Penggabungan Git melakukan penggabungan fast-forward atau penggabungan no-fast-forward. Penggabungan tanpa penerusan cepat juga dikenal sebagai penggabungan tiga arah atau penggabungan sejati. Git rebase adalah jenis penggabungan lain. Jenis penggabungan ini diperlihatkan dalam diagram berikut.
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 dapat 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 fast-forward menghasilkan komit gabungan baru yang mengintegrasikan perubahan cabang sumber dengan perubahan cabang target. Perubahan yang berlaku adalah yang dilakukan setelah commit terakhir yang sama 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. Komit penggabungan (L) berisi perubahan yang terintegrasi dari cabang sumber dan cabang target. Tips cabang sumber dan target (K dan E) adalah induk dari penerapan penggabungan. Dalam riwayat commit cabang Anda , merge commit 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 fast-forward, rebase tidak membuat commit penggabungan. Perlu dicatat, rebase mengubah urutan komit cabang target yang ada, yang tidak terjadi pada 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 merge dan rebase hanya memodifikasi 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 manual referensi Git dan strategi penggabungan Git .
Git merge dan Git rebase yang digunakan secara luas dalam alur kerja Git . Saat mengerjakan fitur lokal atau cabang perbaikan bug, merupakan praktik yang umum untuk:
- Jaga cabang
main
lokal Anda tetap terkini dengan rekan jauhnya dengan secara berkala pull untuk mengambil dan menggabungkan commit jarak jauh. - Integrasikan pembaruan cabang lokal
main
ke cabang fitur lokal Anda dengan menggunakan rebase atau merge. - Backup pekerjaan Anda di cabang fitur lokal dengan mengirim ke cabang jarak jauh yang sesuai.
- Setelah fitur selesai, buat pull request untuk menggabungkan cabang fitur remote Anda ke cabang remote
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.
Proses untuk menyelesaikan konflik penggabungan berlaku untuk merge Git dan rebase Git. Meskipun langkah-langkah berikut menjelaskan cara menyelesaikan konflik ketika melakukan merge, Anda juga dapat menyelesaikan konflik ketika melakukan rebase.
Tip
Jika cabang sumber adalah cabang pelacakan jarak jauh, pastikan cabang tersebut up-to-date dengan menjalankan Git mengambil sebelum penggabungan. Atau, jalankan perintah git pull, yang menggabungkan fetch Git dengan merge Git.
- Visual Studio 2022
- Visual Studio 2019 - Menu Git
- Visual Studio 2019 - Team Explorer
- Antarmuka Baris Perintah 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 .
Di panel Cabang dari jendela Repositori Git, lihat cabang target. Kemudian klik kanan cabang sumber dan pilih Gabungkan> cabang sumber <ke <cabang target>.
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 di jendela Perubahan Git mencantumkan file dengan konflik penggabungan. Untuk file dengan konflik penggabungan dalam kontennya, klik dua kali file untuk membukanya di editor penggabungan.
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 Penggabungan setelah Anda menyelesaikan semua konflik penggabungan dalam file saat ini. Ulangi langkah ini untuk setiap file dengan konflik konten.
Untuk file yang diedit di satu cabang dan dihapus di cabang lainnya, klik kanan file dan pilih tindakan cabang mana yang Anda inginkan.
Di jendela Perubahan Git, masukkan pesan komit dan pilih Komit Staged untuk menyelesaikan penggabungan—setelah Anda menyelesaikan semua konflik penggabungan untuk semua file.