Version Control dengan Git (Kolaborasi Kode)

4 min readFundamental
GitGitHubDevOpsBackend

Git adalah standar industri untuk mengelola perubahan kode secara kolaboratif. Ibarat "mesin waktu" untuk kode Anda: setiap perubahan yang bermakna bisa direkam, ditelusuri, dan dibatalkan kapan saja — tanpa harus membuat salinan folder backup-final-2 lagi.

Basic Workflow: Siklus Tiga Area

Sebelum memahami perintahnya, pahami tiga area tempat file "tinggal":

Working Directory (folder kerja)
        │  git add
        ▼
Staging Area (keranjang belanja)
        │  git commit
        ▼
Repository (simpanan permanen / history)
  1. Working directory — tempat Anda mengedit file.
  2. Staging area — file yang "di-mark" untuk masuk ke commit berikutnya (keranjang belanja).
  3. Repository — history commit yang sudah permanen.

Perintah dasar

# 1. Inisialisasi repositori di folder project
git init

# 2. Lihat status file (mana yang berubah / belum di-track)
git status

# 3. Pindahkan file ke staging area
git add .                 # semua perubahan
git add src/UserService.java   # satu file tertentu

# 4. Simpan snapshot ke history dengan pesan yang jelas
git commit -m "feat: add user registration endpoint"

# 5. Lihat riwayat commit
git log --oneline         # ringkas
git log                   # lengkap

Lihat penjelasan lengkap di Git Basics — Getting a Started Repository.

Siklus nyata di hari kerja

git status                          # "kenapa ini gak jalan? oh, file belum di-add"
git add src/UserService.java
git commit -m "fix: validate email before saving user"

Pesan commit yang baik menjelaskan mengapa, bukan hanya apa:

buruk:  "update file"
baik:   "fix: return 400 when email already registered"
baik:   "feat: add cursor pagination to GET /orders"

Branching & Remote Repository

Branch: Jalur kerja paralel

Branch memungkinkan banyak developer bekerja di fitur berbeda tanpa saling mengganggu. Main branch (main/master) biasanya dijaga tetap stabil; semua eksperimen dilakukan di branch fitur.

# Buat branch baru + langsung pindah ke sana
git checkout -b feature/login
# atau (versi lebih baru)
git switch -c feature/login

# Cek branch aktif
git branch

# Kembali ke main
git checkout main

# Gabungkan branch fitur ke main
git merge feature/login
# Alur khas:
#   main ── A ── B ── C ───────────── (stabil)
#            └── feature/login (D, E) ── merge → main

Remote Repository (GitHub & kawan-kawan)

Remote repository adalah server pusat (biasanya di GitHub) tempat kode dibagikan dan disinkronkan antar developer.

# Ambil repositori yang sudah ada dari remote (untuk project baru di komputer)
git clone https://github.com/username/project.git

# Tambahkan remote ke repositori lokal (jika project baru dibuat lokal)
git remote add origin https://github.com/username/project.git

# Dorong commit lokal ke remote
git push origin feature/login

# Tarik perubahan terbaru dari remote
git pull origin main

# Lihat daftar remote
git remote -v

Aturan penting: git pull (sering disarankan: git pull --rebase) sebelum mulai bekerja dan sebelum push, agar perubahan Anda dibangun di atas kode terbaru, bukan di atas versi lama.

Jangan pernah commit hal yang salah

.gitignore mencegah file sensitif atau sementara masuk ke repo — file .env (berisi secret), folder node_modules/, atau hasil build:

node_modules/
.env
target/
*.log

⚠️ Keamanan: secret (password, API key, kredensial database) tidak boleh pernah masuk ke Git — sekali ter-commit, ia selamanya ada di history meski file dihapus. Selalu baca dari environment variable, dan pastikan .env masuk .gitignore.

Penanganan Merge Conflict

Konflik terjadi ketika dua developer mengubah baris yang sama pada file yang sama, dan Git tidak bisa memutuskan sendiri hasil akhirnya. Ini bukan hal yang memalukan — ini bagian normal dari kolaborasi.

git merge feature/login
# Output:
#   Auto-merging UserService.java
#   CONFLICT (content): Merge conflict in UserService.java
#   Automatic merge failed; fix conflicts and then commit the result.

File yang konflik berisi penanda khusus:

<<<<<<< HEAD
    return userRepository.save(user);
=======
    return userService.saveWithAudit(user);
>>>>>>> feature/login

Langkah penyelesaian:

  1. Buka file yang konflik (cek dengan git status).
  2. Baca dua versi: bagian atas (<<<<<<< HEAD) adalah versi branch Anda, bagian bawah (>>>>>>> feature/login) adalah versi branch yang di-merge.
  3. Pilih/dua-duanya digabung secara manual — hapus penanda <<<<<<<, =======, >>>>>>> dan tulis hasil akhir yang benar.
  4. Mark sebagai selesai lalu commit:
git add UserService.java
git commit -m "merge: resolve conflict in UserService"

Mencegah konflik

  • git pull sering sebelum mulai bekerja.
  • Ambil satu "bagian" kode (satu modul/file) per branch, jangan serentak mengerjakan file yang sama.
  • Komunikasi dalam tim: bilang duluan kalau akan menyentuh file yang sedang dikerjakan orang lain.

Ringkasan

Git bekerja dalam siklus tiga area: working → staging → repository. Gunakan branch untuk isolasi fitur, sinkronkan lewat remote dengan push/pull/clone, dan selesaikan merge conflict secara manual dengan membaca penanda dua versi. Dengan Git, setiap perubahan kode bisa dilacak, dibatalkan, dan dibagikan — fondasi penting untuk bekerja dalam tim backend yang sesungguhnya.

Itu menutup seri Modul Fundamental. Mulai dari Object-Oriented Programming (OOP) jika ingin mengulang dari awal.

← Back to technical articles