Kelas Git BlankOn Bagian II

Jumat, 14 Oktober 2016 
Pemateri: Herpiko Dwi Aguno 
Pencatat: Raviyanto Ahmad

Mengatasi Konflik

Kita keluar dari direktori puisi. Kita buat direktori baru.

$ mkdir konflik
$ cd konflik
$ git init
$ nano konflik1.txt

Isi berkas konflik1.txt dengan tiga baris kata.

Selamat
pagi
Bandung

Simpan, masukkan berkas dalam tempat penampungan, lalu sahkan. Pesan pengesahan bebas.

$ git add .
$ git commit -m "Pesan awal tentang konflik"

Sunting lagi berkasnya. Baris kedua ganti dengan kata siang .

Selamat
siang
Bandung

Simpan, tampung, dan sahkan.

$ git add .
$ git commit -m "Pesan kedua tentang konflik"

Sekarang dari git log kita punya dua pengesahan.

commit b66b046ac1867a17505f366a0cc4d6aa2b1b53fb
Author: Raviyanto Ahmad <raviyanto@gmail.com>
Date:   Sat Nov 5 08:04:34 2016 +0700

    Pesan kedua tentang konflik

commit a6c48c7eeef02f58b890c901478f4f280b6895bc
Author: Raviyanto Ahmad <raviyanto@gmail.com>
Date:   Sat Nov 5 07:57:34 2016 +0700

    Pesan awal tentang konflik

Kita pindah ke pengesahan pertama. Buat pencabangan baru. Namanya sore.

$ git checkout a6c4
$ git checkout -b sore

Sunting berkas. Baris kedua kita ganti dengan kata sore.

Selamat
sore
Bandung

Simpan, tampung, dan sahkan.

$ git add .
$ git commit -m "Ganti kata pagi dengan kata sore"

Di cabang sore ini kita punya dua pengesahan.

commit 32f53a391ab2cdf582b668e76493c1e99d5b3ae8
Author: Raviyanto Ahmad <raviyanto@gmail.com>
Date:   Sat Nov 5 08:35:28 2016 +0700

    Ganti kata pagi dengan kata sore

commit a6c48c7eeef02f58b890c901478f4f280b6895bc
Author: Raviyanto Ahmad <raviyanto@gmail.com>
Date:   Sat Nov 5 07:57:34 2016 +0700

    Pesan awal tentang konflik

Sekarang kita punya dua cabang–master dan sore. Masing-masing cabang punya dua pengesahan. Pengesahan pertama sama (nomor identitas master dan sore sama, yaitu a6c4 ). Pengesahan kedua berbeda (nomor identitas master: b66b dan nomor identitas sore: 32f5).

Konflik terjadi apabila ada baris yang sama tersunting oleh cabang yang berbeda. Seperti yang kita tahu tadi, baris kedua itu disunting oleh cabang yang berbeda. Tidak peduli penyuntingan itu dilakukan oleh jumlah pengesahan yang berbeda di masing-masing cabang.

Apabila ada perbedaan di baris yang sama, terjadi konflik. Apabila perubahannya berada di baris yang berbeda, tidak akan konflik. Git cukup pintar mendeteksi itu, tetapi tidak cukup pintar memutuskan, manakah yang benar: siang atau sore ?

Mari kita pindah ke cabang master, lalu kita gabungkan kedua cabang.

$ git checkout master
$ git merge sore

Apa yang terjadi?

Auto-merging konflik1.txt
CONFLICT (content): Merge conflict in konflik1.txt
Automatic merge failed; fix conflicts and then commit the result.

Terjadi konflik. Mari kita buka berkasnya dengan editor teks.

Selamat
<<<<<<< HEAD
siang
=======
sore
>>>>>>> sore
Bandung

Tugas kita adalah memilih mana yang benar. Kita singkirkan yang salah. Misal yang benar adalah kata sore yang berada di bawah tanda ===. Kita singkirkan tanda-tanda dan kata yang salah.

 <<<<<<< HEAD 
 siang
 =======

 >>>>>>> sore

Hasil penyuntingannya sebagai berikut.

Selamat
sore
Bandung

Kita simpan berkasnya, tampung, lalu sahkan. Lihat status direktori kerja kita dengan git status.

On branch master
nothing to commit, working directory clean

Nah, konflik terselesaikan.