Ngobrolin Git Dari Basic Sampe Command Harian yang Kepake

Ngobrolin Git Dari Basic Sampe Command Harian yang Kepake
Photo by Gabriel Heinzer / Unsplash

Pernah nggak sih lagi ngerjain project, eh tiba-tiba nggak sengaja nghapus folder penting? Atau, lagi asyik-asyiknya nambahin fitur baru, ternyata malah bikin fitur lama error, terus bingung cara balikinnya ke kondisi sebelumnya? Atau yang paling epik, kerja tim bareng teman, terus file-nya ditumpuk-tumpuk gitu aja, ujung-ujungnya malah kacau semua?

Kalau kamu pernah ngalamin skenario-skenario horor itu, selamat! Kamu siap buat kenalan sama superhero di dunia ngoding: Git.

Yap, Git itu bukan cuma sekadar alat buat ngesave kode. Lebih dari itu, Git adalah version control system (VCS) yang bakal jadi sahabat terbaik kamu dalam ngatur project, baik itu solo project atau bareng tim. Intinya, Git ini kayak mesin waktu plus sistem kolaborasi super canggih buat kode kamu.

Kenapa sih Git itu penting banget? Bayangin gini, setiap kamu bikin perubahan di kode, Git itu bakal nyimpen 'snapshot' atau 'foto' dari kondisi project kamu saat itu. Jadi, kalau ada apa-apa di kemudian hari (kayak nghapus file atau bikin error), kamu bisa dengan mudah 'balik' ke 'foto' sebelumnya. Ini beda banget sama cuma copy-paste folder project dengan nama projectfinalfinalfixiniterakhirbeneran, yang jelas nggak efektif dan bikin pusing.

Selain itu, buat kerja tim, Git bikin semua orang bisa kerja di bagiannya masing-masing tanpa saling ganggu. Nanti tinggal digabungin deh perubahan-perubahannya. Keren kan?

Oke, sekarang kita langsung aja ngobrolin Git dari yang paling basic banget sampe command yang sering kepake tiap hari. Anggap aja ini obrolan santai sambil ngopi, biar gampang nyerapnya.

Mulai Dari Nol: git init dan Area-Area Penting di Git

Sebelum pake Git di project kamu, project itu harus dijadiin 'repository' (repo) Git dulu. Gampang banget kok, cukup buka Terminal (atau Command Prompt/Git Bash) di folder project kamu, terus ketik:

bash
git init

Boom! Sekarang folder project kamu udah jadi repo Git. Kamu bakal lihat ada folder .git yang tersembunyi di dalamnya. Jangan diutak-atik ya folder ini, karena di situlah semua 'sihir' Git disimpan.

Setelah di-init, Git itu punya tiga area utama yang penting buat kamu pahamin:

  1. Working Directory: Ini adalah folder project kamu yang isinya file-file yang lagi kamu kerjain. Di sinilah kamu ngetik kode, bikin file baru, atau nghapus file.
  2. Staging Area (Index): Area ini itu kayak keranjang belanja atau area 'siap kirim'. Kamu milih file-file mana aja dari Working Directory yang perubahannya mau kamu simpan. File yang udah di-add bakal masuk ke sini.
  3. Git Repository (Local Repo): Nah, ini dia 'brankas' tempat semua 'foto' atau commit kamu disimpan. Setiap kali kamu melakukan commit, Git bakal nyimpen snapshot dari apa yang ada di Staging Area ke sini.

Jadi alurnya gini: kamu ubah file di Working Directory, kamu add perubahannya ke Staging Area, lalu kamu commit perubahannya dari Staging Area ke Local Repository.

Ngecek Kondisi Project: git status

Salah satu command yang bakal paling sering kamu ketik adalah git status. Command ini gunanya buat ngecek kondisi project kamu saat ini:

  • File mana aja yang udah diubah tapi belum di-add?
  • File mana aja yang udah di-add tapi belum di-commit?
  • Ada file baru yang belum dilacak sama Git nggak?
  • Ada di branch mana kamu sekarang?

Coba deh setelah git init, bikin file baru misalnya index.html. Terus jalanin git status. Git bakal ngasih tau kalau ada file baru yang untracked (belum dilacak).

Nambahin Perubahan ke Staging Area: git add

Oke, kamu udah bikin file index.html dan udah ngubah file lain juga. Sekarang saatnya masukin perubahan-perubahan yang udah 'mateng' ke Staging Area biar siap di-commit. Caranya pake git add:

  • Buat nambahin satu file: git add nama_file.html
  • Buat nambahin semua file yang diubah/baru di folder saat ini: git add . (tanda titik artinya folder saat ini)
  • Buat nambahin semua file di folder tertentu: git add nama_folder/

Setelah git add, coba jalanin lagi git status. File yang tadinya untracked atau modified sekarang bakal berubah status jadi changes to be committed dan warnanya biasanya hijau. Artinya, perubahan di file itu udah ada di Staging Area.

Nyimpen 'Snapshot' Project: git commit

Ini dia inti dari Git! git commit gunanya buat nyimpen permanen perubahan yang ada di Staging Area ke Local Repository. Setiap commit itu kayak 'save point' di game, lengkap dengan pesan yang jelas.

Command-nya gini:

bash
git commit -m "Pesan commit kamu di sini"

Pesan commit (setelah -m) itu penting banget! Usahain pesannya singkat, jelas, dan ngegambarin apa aja yang kamu ubah di commit itu. Contoh pesan yang bagus:

  • feat: add login page layout (Menambahkan layout halaman login)
  • fix: resolve bug in user registration (Memperbaiki bug di registrasi user)
  • docs: update README with installation steps (Memperbarui README dengan langkah instalasi)
  • refactor: restructure authentication module (Merestrukturisasi modul autentikasi)

Hindari pesan commit yang nggak jelas kayak "changes", "update", atau "fix bug". Pesan yang bagus itu ngebantu banget kamu atau tim kamu ngerti riwayat perubahan project tanpa harus ngelihat detail kodenya.

Setelah git commit, perubahan kamu udah tersimpan dengan aman di Local Repository. Kalau kamu jalanin git status lagi, harusnya udah bersih, nggak ada changes to be committed.

Melihat Jejak Perubahan: git log

Oke, kamu udah bikin beberapa commit. Gimana caranya lihat riwayat commit yang udah kamu buat? Pake git log:

bash
git log

Command ini bakal nampilin daftar commit secara kronologis terbalik (yang paling baru di atas). Setiap commit punya ID unik yang panjang (hash), info author, tanggal, dan pesan commit-nya.

Kalau kamu pengen lihat riwayat yang lebih ringkas, bisa pake flag --oneline:

bash
git log --oneline

Ini bakal nampilin setiap commit dalam satu baris aja, cuma ID commit yang disingkat dan pesan commit-nya. Berguna banget buat lihat riwayat secara cepat.

Mau lihat struktur commit-nya kayak pohon? Bisa pake --graph:

bash
git log --oneline --graph --all

Ini bakal nampilin visualisasi percabangan dan penggabungan commit kamu. --all biar semua branch (nanti kita bahas) ikut ditampilin.

Kekuatan Super Git: Branching!

Ini nih salah satu fitur paling powerful dari Git: Branching. Branch itu kayak 'garis waktu' paralel dari project kamu. Bayangin project kamu itu pohon, branch itu ranting-rantingnya.

Secara default, saat kamu git init, Git bakal bikin branch utama namanya main (atau kadang master di versi lama). Ini adalah 'garis waktu' utama project kamu yang isinya kode yang stabil atau siap rilis.

Nah, kalau kamu mau nambahin fitur baru atau lagi eksperimen sesuatu, jangan langsung kerja di branch main. Bikin branch baru! Kenapa? Supaya kerjaan kamu nggak ganggu kode utama yang udah stabil. Kalau eksperimennya gagal, tinggal hapus branch-nya, kode utama tetep aman. Kalau berhasil, tinggal digabungin (di-merge) ke branch main.

Command buat urusan branch:

  • Melihat daftar branch yang ada: git branch (branch kamu saat ini ada tanda bintang di depannya)
  • Membuat branch baru: git branch nama-branch-baru (Ini cuma bikin branch-nya, kamu masih di branch lama)
  • Berpindah ke branch lain: git checkout nama-branch-lain
  • Membuat branch baru dan langsung pindah ke branch itu (shortcut): git checkout -b nama-branch-baru

Contoh skenarionya: Kamu lagi di branch main. Mau bikin fitur login.

  1. Bikin branch baru buat fitur login: git checkout -b feature/login
  2. Sekarang kamu udah ada di branch feature/login. Kerjain semua kode buat fitur login di sini.
  3. Setiap perubahan penting, git add dan git commit. Semua commit ini cuma akan ada di branch feature/login, nggak ngaruh ke main.
  4. Kalau fitur login udah selesai dan dites oke, saatnya digabungin ke main.

Menggabungkan Perubahan: git merge

Setelah kamu selesai kerja di branch fitur (misalnya feature/login) dan udah siap digabungin ke branch utama (misalnya main), kamu perlu melakukan merge.

Langkahnya gini:

  1. Pastikan kamu ada di branch tujuan merge (dalam kasus ini, main): git checkout main
  2. Pastikan branch main kamu udah yang paling update (nanti kita bahas soal remote): git pull origin main (kalau pake remote)
  3. Gabungkan branch fitur ke branch main: git merge feature/login

Git bakal coba menggabungkan perubahan dari feature/login ke main.

Merge Conflicts: Kadang-kadang, Git nggak bisa otomatis ngegabungin perubahan. Ini terjadi kalau di branch main dan branch feature/login ada perubahan di baris kode yang sama dari file yang sama. Git bingung mau pake yang mana. Inilah yang namanya merge conflict.

Kalau terjadi conflict, Git bakal ngasih tau file mana aja yang conflict. Kamu harus buka file-file itu, lihat bagian kode yang conflict (biasanya ditandai sama <<<<<<<, =======, >>>>>>>), terus kamu edit manual kode itu mau kayak gimana hasil akhirnya. Setelah selesai edit dan milih kode mana yang mau dipake (atau gabungin keduanya), git add file yang conflict itu, terus git commit lagi. Git bakal bikin commit baru yang isinya hasil penggabungan yang udah kamu benerin.

Kolaborasi dan Backup: Remote Repository

Sampai sini, semua yang kita bahas itu baru di komputer kamu sendiri (Local Repository). Gimana kalau mau kerja bareng tim atau nyimpen project di cloud biar aman (misalnya di GitHub, GitLab, Bitbucket)? Nah, itu perlu Remote Repository.

Remote Repository itu intinya salinan Git repo kamu yang ada di server lain di internet. Paling umum ya di platform-platform kayak GitHub.

  • Mengambil salinan dari remote: Kalau project-nya udah ada di remote (misalnya di GitHub), kamu bisa ambil salinannya ke komputer kamu pake git clone:

bash
    git clone repositoryremote>

Ini bakal nge-download seluruh isi repo, termasuk semua riwayat commit dan branch-nya, ke komputer kamu. Otomatis juga bakal nge-set 'remote' dengan nama default origin yang ngarah ke URL remote itu.

  • Melihat remote yang terhubung: Kamu bisa lihat remote mana aja yang terhubung ke repo lokal kamu pake:
bash
    git remote -v

Biasanya bakal muncul origin dan URL-nya.

Mengirim perubahan ke remote: Setelah kamu commit perubahan di repo lokal, perubahan itu belum* ada di remote. Buat ngirim commit-commit lokal kamu ke remote, pake git push:

bash
    git push remote> branch>

Contoh: git push origin main (mengirim commit dari branch main lokal ke branch main di remote origin).

  • Mengambil perubahan dari remote: Kalau ada anggota tim lain yang udah push perubahan ke remote, repo lokal kamu nggak akan otomatis ke-update. Buat ngambil perubahan terbaru dari remote, pake git pull:
bash
    git pull remote> branch>

Contoh: git pull origin main (mengambil perubahan terbaru dari branch main di remote origin dan langsung menggabungkannya ke branch main lokal kamu). Command git pull ini sebenarnya gabungan dari dua command: git fetch (mengambil data dari remote tapi belum digabungin) dan git merge (menggabungkan data yang diambil).

Kadang, kamu mungkin cuma mau lihat ada perubahan apa aja di remote tanpa langsung menggabungkannya. Pake git fetch.

bash
    git fetch remote> branch>

Setelah fetch, kamu bisa lihat perubahannya (misalnya pake git log origin/main) sebelum memutuskan mau di-merge atau nggak.

Command Harian Lain yang Kepake Banget

Selain yang udah disebutin di atas, ada beberapa command lagi yang bakal sering banget kamu pake:

  • Melihat perbedaan perubahan: Kamu mau lihat apa aja sih yang udah kamu ubah di Working Directory sebelum di-add atau di Staging Area sebelum di-commit? Pake git diff.

* Lihat perbedaan di Working Directory (belum di-add): git diff * Lihat perbedaan di Staging Area (udah di-add tapi belum di-commit): git diff --staged atau git diff --cached * Lihat perbedaan antara dua commit, atau branch: git diff commit1id commit2id, git diff branch1 branch2

  • Nyimpen kerjaan sementara (stash): Lagi ngerjain sesuatu, tapi tiba-tiba disuruh buru-buru benerin bug di branch lain? Sementara kerjaan yang sekarang belum selesai atau belum siap di-commit. Jangan panik! Pake git stash. Command ini bakal nyimpen semua perubahan yang ada di Working Directory dan Staging Area kamu secara sementara, dan balikin kondisi working directory kamu ke commit terakhir.

* Nyimpen perubahan: git stash * Melihat daftar stash: git stash list * Mengembalikan stash paling baru: git stash apply (perubahan dikembalikan, stash-nya masih ada di daftar) * Mengembalikan stash paling baru dan menghapusnya dari daftar: git stash pop * Mengembalikan stash tertentu (misal stash@{1}): git stash apply stash@{1}

  • Membatalkan commit dengan aman: Kamu bikin commit, tapi ternyata commit itu bikin masalah. Mau balikin kondisi sebelum commit itu, tapi nggak mau nghapus riwayat commit-nya? Pake git revert. Command ini bakal bikin commit baru yang isinya kebalikan dari commit yang mau dibatalin. Ini cara yang aman kalau commit-nya udah pernah di-push ke remote dan dibagiin ke tim.

bash
    git revert 
  • Membatalkan commit (lebih drastis): Kadang kamu beneran mau menghapus commit terakhir (atau beberapa commit terakhir) dari riwayat lokal kamu. Pake git reset. HATI-HATI pake command ini, terutama kalau commit-nya udah di-push ke remote! git reset itu me-rewrite history. Ada beberapa mode:

* git reset --soft: HEAD pindah ke commit ID, perubahan setelah itu jadi di Staging Area. * git reset --mixed(ini default-nya): HEAD pindah ke commit ID, perubahan setelah itu jadi di Working Directory (belum di-add). * git reset --hard: HEAD pindah ke commit ID, SEMUA perubahan setelah itu di Working Directory dan Staging Area HILANG PERMANEN. Pake ini cuma kalau kamu yakin banget.

Contoh: Membatalkan commit terakhir (paling sering dipakai): git reset HEAD~1 (mengembalikan ke satu commit sebelum HEAD/commit terakhir).

  • Mengabaikan File/Folder tertentu: Ada file atau folder yang nggak perlu masuk ke Git repo kamu (misalnya file konfigurasi lokal, folder node_modules, file log, dll.)? Bikin file namanya .gitignore di root folder project kamu. Setiap baris di file ini adalah pola file/folder yang akan diabaikan sama Git.

Contoh isi file .gitignore:

# Ignore Node.js modules
    node_modules/# Ignore log files
    *.log# Ignore specific file
    my_config.local

File-file atau folder yang cocok dengan pola di .gitignore nggak akan muncul di git status sebagai untracked dan nggak bisa di-add atau di-commit (kecuali kalau file itu udah pernah di-track sebelumnya, perlu cara khusus buat ngapus tracking-nya).

Sedikit Info Tambahan: Workflow Git

Ada beberapa "workflow" atau cara standar pake Git yang biasa diikutin tim developer. Yang paling populer itu Gitflow dan GitHub Flow (atau GitLab Flow, intinya mirip).

  • Gitflow: Ini workflow yang lebih kompleks, biasanya buat project yang punya rilis terjadwal. Dia punya branch-branch khusus kayak develop (buat pengembangan), feature/ (buat fitur baru), release/ (buat persiapan rilis), hotfix/ (buat benerin bug di versi rilis), dan main (buat versi stabil yang udah dirilis).
  • GitHub Flow / GitLab Flow: Lebih sederhana. Biasanya cuma pake branch main (atau master) yang selalu stabil, dan branch-branch fitur buat kerjaan baru. Setiap fitur selesai, dibikin Pull Request (di GitHub) atau Merge Request (di GitLab/Bitbucket) buat di-review sama anggota tim lain sebelum di-merge ke main. Ini workflow yang paling umum buat project web atau aplikasi yang rilisnya cepet.

Memahami salah satu workflow ini bakal ngebantu banget kalau kamu kerja di tim.

Penutup: Practice Makes Perfect

Git ini emang awalnya kelihatan banyak banget command-nya dan konsepnya (staging area, commit, branch, remote, merge conflict, dll.). Tapi percaya deh, semua itu gunanya besar banget buat bikin proses ngoding kamu lebih terstruktur, aman, dan gampang buat kolaborasi.

Kunci buat jago Git itu cuma satu: Latihan! Jangan takut buat nyoba command-command di atas. Bikin project iseng-iseng sendiri, git init, coba add, commit, bikin branch baru, pindah branch, merge. Coba bikin conflict sengaja terus benerin. Coba pake git stash. Kalau udah nyaman, coba bikin akun GitHub/GitLab, bikin repo, git clone, git push, git pull.

Semakin sering kamu pake, semakin natural rasanya. Git itu alat yang powerful, dan kalau kamu kuasai, itu bakal jadi skill yang sangat berharga buat karir kamu di dunia teknologi.

Jadi, siap ninggalin era copy-paste folder project dan masuk ke era version control yang keren bareng Git? Selamat mencoba!