Git mencatat sejarah perubahan sebuah proyek sebagai rangkaian potret yang dapat dikunjungi kembali, sehingga kesalahan dapat dibatalkan dan setiap perubahan dapat ditelusuri asalnya. Topik ini membahas dasar-dasar Git untuk kolaborasi, mulai dari repository dan commit, pemeriksaan perubahan sebelum commit, branch dan merge, penyelesaian konflik, sampai pull request yang menjadi sarana review pada proyek tim. Seluruh contohnya dijalankan pada satu repositori latihan yang dibangun bertahap, sehingga setiap perintah dapat diulang persis seperti yang ditampilkan. Setelah membacanya, alur kerja dasar seorang kontributor sudah lengkap.
Repository dan commit#
Repository adalah folder proyek yang sejarahnya dicatat penuh oleh Git, dan commit adalah satu potret isi proyek pada titik waktu tertentu. Setiap commit menyimpan penunjuk ke potret isi proyek, identitas penulis, waktu, serta pesan yang menjelaskan perubahan, dan keseluruhan data itu menghasilkan satu hash singkat yang menjadi nama commit tersebut. Repositori latihan berikut dibuat di dalam folder baru beserta commit pertamanya.
# membuat repositori latihan di dalam folder baru
git init -q -b main catatan
cd catatan
# identitas dan tanggal tetap agar keluaran contoh dapat direproduksi
git config user.name "Penulis Contoh"
git config user.email "[email protected]"
export GIT_AUTHOR_DATE="2026-11-02T09:00:00" GIT_COMMITTER_DATE="2026-11-02T09:00:00"
echo "Daftar belanja mingguan" > catatan.txt
git add catatan.txt
git commit -qm "Commit pertama"
git log --oneline06b1ad9 Commit pertamaPerintah git add menaruh berkas ke area staging, yaitu daftar perubahan yang akan masuk commit berikutnya, sedangkan git commit -m menyimpannya menjadi potret. Opsi -b main pada git init memilih nama branch utama sejak awal, mengikuti kebiasaan umum proyek daring.
Memeriksa perubahan sebelum commit#
Perubahan yang baru dilakukan tidak langsung tersimpan, dan Git menyediakan perintah untuk memeriksanya sebelum di-commit. git status menampilkan keadaan kerja secara ringkas, sedangkan git diff menampilkan baris yang berubah beserta penandanya, dengan tanda kurang untuk baris yang hilang dan tanda tambah untuk baris yang muncul. Rangkaian berikut mengubah berkas, memeriksanya, lalu menyimpannya sebagai commit kedua.
# mengubah isi berkas
echo "Daftar belanja mingguan dan rencana masak" > catatan.txt
# memeriksa keadaan kerja dan perubahan yang belum di-staging
git status --short
git diff
# menyimpan perubahan sebagai commit kedua
git add catatan.txt
git commit -qm "Perbarui isi catatan"
git log --oneline M catatan.txt
diff --git a/catatan.txt b/catatan.txt
index d5ef541..003b1e2 100644
--- a/catatan.txt
+++ b/catatan.txt
@@ -1 +1 @@
-Daftar belanja mingguan
+Daftar belanja mingguan dan rencana masak
6043828 Perbarui isi catatan
06b1ad9 Commit pertamagit diff tanpa argumen hanya menampilkan perubahan yang belum masuk area staging, sehingga perintah ini cocok untuk meninjau pekerjaan yang sedang berjalan. Kebiasaan membaca diff sebelum commit menjaga setiap commit tetap berisi satu perubahan yang utuh dan dijelaskan pesannya dengan benar.
Branch dan merge#
Branch adalah penunjuk ringan menuju satu commit, sehingga membuatnya cepat dan tidak menyalin berkas apa pun. Pekerjaan baru dikerjakan pada branch terpisah, sedangkan branch utama main tetap berada pada keadaan yang stabil. Setelah pekerjaannya selesai, git merge menggabungkan sejarah branch tersebut kembali ke main, dan --no-ff memaksa pembuatan commit gabungan agar peristiwa merge terlihat pada sejarah.
# membuat branch ide-resep dan mengubah catatan di dalamnya
git switch -qc ide-resep
printf 'Daftar belanja mingguan\nRencana masak akhir pekan\n' > catatan.txt
git commit -aqm "Tambah rencana masak"
# kembali ke main dan menggabungkan branch
git switch -q main
git merge --no-ff -q ide-resep -m "Gabungkan ide-resep"
git log --oneline --graph* 651eb4f Gabungkan ide-resep
|\
| * 7651336 Tambah rencana masak
|/
* 6043828 Perbarui isi catatan
* 06b1ad9 Commit pertamaKeluaran --graph menggambar percabangan sejarahnya secara harfiah. Commit “Tambah rencana masak” berada di atas jalur branch, sedangkan commit gabungan di atasnya memuat dua orang tua, yaitu posisi main sebelumnya dan ujung branch ide-resep.
Konflik merge dan penyelesaiannya#
Merge berjalan otomatis selama perubahan yang digabung tidak menyentuh baris yang sama. Apabila dua branch mengubah baris yang sama secara berbeda, Git tidak memilih salah satunya secara otomatis dan menghentikan merge dengan konflik. Rangkaian berikut sengaja menimbulkan konflik tersebut, lalu menampilkan isi berkas yang memuat penanda konfliknya.
# branch pengingat mengubah baris pertama secara berbeda
git switch -qc pengingat
sed -i '1s/mingguan/mingguan dan pengingat rapat/' catatan.txt
git commit -aqm "Tambah pengingat rapat"
# main mengubah baris yang sama pula
git switch -q main
sed -i '1s/mingguan/mingguan dan daftar sayur/' catatan.txt
git commit -aqm "Tambah daftar sayur"
# menggabungkan dua perubahan yang bertabrakan
git merge pengingat
cat catatan.txtAuto-merging catatan.txt
CONFLICT (content): Merge conflict in catatan.txt
Automatic merge failed; fix conflicts and then commit the result.
<<<<<<< HEAD
Daftar belanja mingguan dan daftar sayur
=======
Daftar belanja mingguan dan pengingat rapat
>>>>>>> pengingat
Rencana masak akhir pekanPenanda <<<<<<< dan >>>>>>> mengapit dua versi baris yang bertabrakan, yaitu versi main pada sisi HEAD dan versi branch pengingat pada sisi bawah, sedangkan baris yang tidak bertabrakan dibiarkan apa adanya. Penyelesaian dilakukan dengan menyunting berkas menjadi teks yang diinginkan, menghapus penanda konflik, lalu menyimpan berkas tersebut sebagai commit penutup merge.
# menyunting berkas secara manual dengan menggabungkan kedua perubahan
printf 'Daftar belanja mingguan, pengingat rapat, dan daftar sayur\nRencana masak akhir pekan\n' > catatan.txt
git add catatan.txt
git commit -qm "Selesaikan konflik catatan"
git log --oneline
# kembali ke folder di atas repositori latihan
cd ..9f56c81 Selesaikan konflik catatan
9261a67 Tambah daftar sayur
ca63f56 Tambah pengingat rapat
651eb4f Gabungkan ide-resep
6043828 Perbarui isi catatan
7651336 Tambah rencana masak
06b1ad9 Commit pertamaPull request untuk kolaborasi#
Pull request adalah mekanisme pengusulan penggabungan branch pada layanan hosting repository seperti GitHub atau GitLab. Branch yang sudah selesai diunggah dengan git push ke repositori bersama, lalu pull request membuka halaman yang menampilkan seluruh perubahannya untuk ditinjau. Anggota tim memberikan komentar, meminta perbaikan, dan apabila disetujui, branch tersebut digabungkan ke main melalui merge di sisi platform. Alur lengkapnya digambarkan diagram berikut.
Mekanisme ini menjadikan setiap perubahan dibaca orang lain sebelum masuk main, sehingga kesalahan tertangkap lebih awal dan keputusan teknis tercatat pada halaman diskusinya. Layanan hosting juga dapat menjalankan pemeriksaan otomatis, misalnya linting dan pengujian, pada setiap pull request, sehingga hasil pemeriksaannya menjadi bagian dari keputusan penggabungan.
Kesalahan umum#
Kesalahan pertama adalah mengerjakan pekerjaan tim langsung pada main. Sejarah utama langsung terpengaruh oleh kode yang belum ditinjau, dan beberapa orang yang bekerja pada branch yang sama saling menabrak. Kebiasaan yang benar adalah membuat branch baru untuk setiap pekerjaan, lalu memasukkannya kembali melalui pull request.
Kesalahan kedua adalah menulis pesan commit yang samar seperti “perbaikan” atau “pembaruan”. Pesan semacam itu tidak membantu siapa pun menelusuri sejarah, padahal git log adalah alat utama untuk memahami mengapa sebuah baris berubah. Pesan yang baik berupa satu kalimat singkat yang menyatakan perubahannya, misalnya “Tambah rencana masak pada catatan belanja”.
Kesalahan ketiga adalah menyelesaikan konflik dengan memilih salah satu sisi tanpa membaca maksud kedua perubahan. Penyelesaian semacam itu menghilangkan pekerjaan salah satu pihak secara diam-diam. Setiap penanda konflik dibaca bersama konteksnya, dan kedua perubahan digabungkan apabila keduanya memang dibutuhkan.
Ringkasan#
- Repository mencatat sejarah proyek sebagai rangkaian commit, dan setiap commit membawa potret isi, identitas, waktu, pesan, serta hash yang dihitung dari semuanya.
git statusdangit diffmemeriksa perubahan sebelumgit adddangit commitmenyimpannya.- Branch adalah penunjuk ringan ke commit, sedangkan
git mergemenggabungkan sejarahnya, dan konflik diselesaikan dengan menyunting penanda<<<<<<<sampai>>>>>>>secara manual. - Pull request mengusulkan penggabungan branch pada platform hosting sehingga setiap perubahan direview sebelum masuk
main.
Referensi#
- Git documentation — Git — Dokumentasi resmi Git beserta manual setiap perintahnya.
- Pro Git (edisi kedua) — Apress — Buku lengkap tentang branching, merge, dan alur kerja kolaboratif yang tersedia gratis secara daring.
- About pull requests — GitHub — Penjelasan resmi GitHub tentang cara kerja pull request.