Konflik Penggabungan: Jangan Panik — Pahami dan Selesaikan
Konflik seringkali membuat pemula takut, namun setelah sesi ini Anda akan menghadapinya dengan tenang. Kita akan membahas mengapa konflik terjadi (Git tidak bisa membaca pikiran — ia tidak tahu perubahan mana yang lebih penting), cara membaca penanda konflik, dan bagaimana memilih solusi yang tepat. Kami akan menunjukkan dua pendekatan: resolusi manual dan penggunaan alat penggabungan.
- Anda akan memahami sifat konflik penggabungan dan berhenti takut terhadapnya — konflik akan menjadi dapat diprediksi.
- Anda akan dapat menyelesaikan konflik secara mandiri dengan benar membaca penanda Git.
- Anda akan belajar mengonfigurasi alat penggabungan di editor Anda untuk resolusi konflik secara visual.
Phần đầu bài giảng
Tiga Jenis Konflik Merge
- Konflik konten: perubahan pada baris yang sama
- Konflik rename: file diubah dan diganti namanya
- Konflik penghapusan: file dihapus di satu cabang, tetapi diubah di cabang lain
- Konflik rename paling menjebak bagi Git
- Periksa riwayat file jika konflik terasa mencurigakan
Bayangkan Anda dan rekan sedang mengerjakan fitur baru untuk aplikasi yang familiar, misalnya fitur pembayaran di Gojek atau katalog produk di Tokopedia. Tiba-tiba Git memberi tahu ada konflik. Langkah pertama menuju solusi adalah memahami jenis konfliknya. Konflik konten terjadi ketika perubahan di dua cabang menyentuh baris yang sama. Konflik rename lebih rumit: satu pengembang mengganti nama file, sementara pengembang lain mengedit isi file yang sama. Jenis ketiga adalah konflik penghapusan, ketika file dihapus di satu cabang tetapi masih diubah di cabang lain. Konflik rename sering paling sulit karena Git tidak selalu dapat melacak riwayat file dengan akurat setelah nama file berubah. Karena itu, saat menemukan konflik yang terasa aneh, selalu periksa riwayat perubahan file.
Anatomi Konflik yang Rumit
- Penanda <<<<<<< menunjukkan perubahan Anda
- ======= memisahkan versi Anda dan versi orang lain
- >>>>>>> menandai akhir blok konflik
- git status akan menampilkan semua file bermasalah
- git diff memberikan perbandingan detail atas perubahan
Anggaplah Anda menggabungkan cabang feature ke main dan melihat pesan konflik. Buka file yang bermasalah—Anda akan menemukan penanda khusus. Semua yang berada di antara <<<<<<< HEAD dan ======= adalah perubahan Anda. Semua yang berada di antara ======= dan >>>>>>> feature adalah perubahan dari cabang yang sedang digabungkan. Gunakan git status untuk melihat semua file yang berkonflik, dan git diff untuk melihat perbedaan secara detail. Ingat: penanda konflik bukan kesalahan; penanda itu adalah petunjuk tentang bagian yang perlu Anda putuskan.
#!/bin/bash
# conflict_analysis.sh
echo "Membuat repositori uji coba"
mkdir conflict-demo && cd conflict-demo
git init
echo "Membuat file dan membuat komit pertama di main"
echo 'Baris 1' > file.txt
echo 'Baris 2' >> file.txt
git add . && git commit -m 'Komit awal'
echo "Membuat cabang feature dan mengubah baris pertama"
git checkout -b feature
sed -i 's/Baris 1/Baris 1 diubah di feature/' file.txt
git commit -am 'Mengubah baris 1 di feature'
echo "Kembali ke main dan mengubah baris yang sama"
git checkout main
sed -i 's/Baris 1/Baris 1 diubah di main/' file.txt
git commit -am 'Mengubah baris 1 di main'
echo "Mencoba menggabungkan cabang"
git merge feature || echo 'Konflik!'
echo "\nMelihat status:"
git status --short
echo "\nMenampilkan file yang berkonflik:"
cat file.txt
Strategi Menyelesaikan Konflik
- Penyuntingan manual: hapus penanda, sisakan bagian yang tepat
- Alat GUI: meld, kdiff3 untuk perbandingan visual
- --ours/--theirs: terima versi Anda atau versi orang lain
- Pada rebase, konflik diselesaikan untuk setiap komit
- Setelah selesai, jangan lupa jalankan git add dan git commit
Setelah konflik terdeteksi, ada beberapa cara untuk menyelesaikannya. Anda bisa membuka file secara manual, menghapus penanda konflik, lalu menyisakan kode yang benar. Jika lebih nyaman dengan tampilan visual, gunakan alat seperti meld atau kdiff3; alat ini menampilkan tiga versi file sekaligus. Jika Anda yakin perubahan Anda yang harus dipakai, gunakan git checkout --ours untuk mempertahankan versi Anda, atau --theirs untuk memakai versi dari cabang lain. Hati-hati saat melakukan rebase: konflik bisa muncul pada setiap komit yang sedang dipindahkan. Setelah memilih solusi, tandai file dengan git add lalu lanjutkan proses merge atau rebase.
#!/bin/bash
# resolve_strategies.sh
echo "Cara 1: Penyelesaian manual"
echo 'Edit file, lalu hapus penanda konflik'
echo 'Kemudian jalankan: git add file.txt'
echo "\nCara 2: Terima versi kita"
git checkout --ours file.txt
echo "\nCara 3: Terima versi mereka"
git checkout --theirs file.txt
echo "\nCara 4: Gunakan alat bantu merge"
echo 'git mergetool --tool=meld'
echo "\nSetelah memilih cara, selesaikan merge:"
echo 'git commit -m "Selesaikan konflik merge"'
Bài giảng đầy đủ dành cho thuê bao
Còn 34 slide nữa trong phiên bản đầy đủ.
Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.
Đăng nhập hoặc đăng ký Đăng ký thuê baoNội dung bài giảng
- Tiga Jenis Konflik Merge
- Anatomi Konflik yang Rumit
- Strategi Menyelesaikan Konflik
- Pencegahan dan Praktik Terbaik
- Cara Membaca Konflik Multibaris di Git
- Memahami Penanda Konteks
- Konflik Bersarang: Strategi Penyelesaian
- Otomasi dan alat lanjutan
- Strategi pemilihan: HEAD atau branch?
- Prinsip 'kejutan minimal'
- Konflik semantik: musuh yang tak terlihat
- Alat dan otomasi
- Memilih alat: kapan menggunakan apa
- VS Code: konfigurasi dan fitur lanjutan
- Beyond Compare: skenario untuk konflik kompleks
- Integrasi ke Git Flow dan Otomasi
- Mengotomasi Merge melalui .gitattributes
- Menulis Merge Driver Sendiri
- Git rerere — Asisten Pribadi Anda
- Strategi Otomasi Lanjutan
- Merancang Workflow untuk Tim Besar
- Code Review sebagai Alat Pencegah Konflik
- Strategi Bekerja dengan Branch Feature Jangka Panjang
- Alat dan otomatisasi untuk menyelesaikan konflik
- Bahaya menerima perubahan secara membabi buta
- Strategi menyelesaikan konflik dengan aman
- Pengujian setelah merge: yang perlu diperiksa
- Integrasi dengan CI/CD dan langkah pencegahan
- Perbedaan konflik saat rebase dan merge
- Bekerja dengan --rebase-merges
- Strategi menyelesaikan konflik berurutan
- Teknik Lanjutan dan Debugging rebase
- CI/CD sebagai Sistem Kontrol Kualitas
- GitHub Actions: Pemeriksaan Konflik
- Danger-JS: Otomatisasi Pemeriksaan yang Cerdas
- Resolusi Konflik Otomatis di CI/CD
- Konflik: Dari Panik Menjadi Percaya Diri
Bài viết liên quan đến bài học này
- git merge: cách gộp nhánh và xử lý xung đột
- Git và GitHub: khác nhau thế nào và liên hệ ra sao
- Cách cài đặt Git trên Windows, macOS và Linux
- Git là gì và vì sao lập trình viên cần nó
- Git Bash: đó là gì và cách dùng trên Windows
Tất cả bài giảng của khóa học
- Pengantar: Git dari Nol hingga Pengembang yang Percaya Diri
- Apa Sebenarnya Git Itu — dan Kenapa Tanpanya Sulit Dapat Kerja
- Instalasi dan Konfigurasi: Menyiapkan Git untuk Pertama Kali
- Repositori Pertama: init, add, commit dan Keajaiban Indeks
- Membaca Riwayat: log, diff, show dan Navigasi ke Masa Lalu
- Cabang: Realitas Paralel untuk Kode Anda
- Membatalkan Kesalahan: restore, reset, revert — dengan Benar dan Berbahaya
- GitHub dan Repositori Jarak Jauh: Kode Anda di Awan
- Kerja Tim: Fork, Feature Branch, dan Pull Request
- Konflik Penggabungan: Jangan Panik — Pahami dan Selesaikan
- Proses Git di Tim Nyata: Alur Kerja Mana yang Dipilih
- Alat Lanjutan: rebase, stash, cherry-pick, dan tag
- Proyek Akhir: Simulasi Pengembangan Tim Nyata