🔀 Git & GitHub

Version control wajib buat semua developer. Simpan, lacak, dan kolaborasi kode dengan aman.

Pengenalan Git & GitHub

Git adalah sistem version control terdistribusi — alat yang melacak setiap perubahan kode yang kamu tulis. Kalau ada yang salah, kamu bisa balik ke versi sebelumnya kapan saja.

GitHub adalah platform hosting untuk repositori Git. Di sini kamu bisa menyimpan kode di cloud, berkolaborasi dengan tim, dan membagikan project ke publik.

💡 Git berjalan di komputermu (lokal). GitHub adalah server tempat menyimpan Git repository secara online. Keduanya berbeda tapi saling melengkapi.
bash
# Cek apakah Git sudah terinstall
git --version
# Output: git version 2.x.x

# Alur kerja dasar Git
# 1. Edit kode
# 2. git add    → staging (pilih file yang mau disimpan)
# 3. git commit → simpan snapshot ke history lokal
# 4. git push   → upload ke GitHub
📌 Bagian Penting: Git dan GitHub itu dua hal berbeda — Git adalah alatnya (bisa dipakai tanpa internet sama sekali), GitHub adalah salah satu layanan hosting-nya (ada juga alternatif lain seperti GitLab, Bitbucket). Jangan sampai tertukar konsepnya.
🐞 Error Umum di Bagian Ini
'git' is not recognized as an internal or external command
Git belum terinstall di komputer, atau belum ditambahkan ke PATH sistem.
Fix: install Git dari git-scm.com, lalu restart terminal/komputer.

Instalasi & Konfigurasi

Download Git di git-scm.com. Setelah install, konfigurasi nama dan email — ini akan muncul di setiap commit yang kamu buat.

  • Windows: download installer dari git-scm.com, jalankan setup
  • macOS: brew install git atau install Xcode Command Line Tools
  • Linux: sudo apt install git (Ubuntu/Debian)
💡 Gunakan email yang sama dengan akun GitHub-mu agar commit terhubung ke profil.
bash
# Set nama dan email (sekali saja, berlaku global)
git config --global user.name "Nama Kamu"
git config --global user.email "email@kamu.com"

# Set editor default (opsional)
git config --global core.editor "code --wait"   # VSCode
git config --global core.editor "nano"          # Nano

# Set branch default ke main
git config --global init.defaultBranch main

# Lihat semua konfigurasi
git config --list
📌 Bagian Penting: git config --global mengatur setting untuk semua repository di komputermu. Kalau butuh setting berbeda untuk satu project tertentu (mis. email kerja vs pribadi), hapus --global dan jalankan perintahnya di dalam folder project tersebut.
🐞 Error Umum di Bagian Ini
Author identity unknown *** Please tell me who you are.
Belum mengatur user.name dan user.email sebelum melakukan commit pertama.
Fix: jalankan git config --global user.name "..." dan user.email terlebih dulu.

Perintah Dasar

Ini perintah yang paling sering kamu pakai setiap hari saat ngoding.

  • git init — buat repository baru di folder saat ini
  • git status — lihat file mana yang berubah
  • git add — masukkan file ke staging area
  • git commit — simpan snapshot ke history
  • git log — lihat riwayat commit
  • git diff — lihat perubahan detail antar versi
bash
# Inisialisasi repo baru
git init

# Cek status file
git status

# Tambah file ke staging
git add index.html          # file spesifik
git add style.css app.js    # beberapa file
git add .                   # semua file yang berubah

# Commit dengan pesan
git commit -m "feat: tambah halaman utama"

# Add + commit sekaligus (hanya file yang sudah pernah di-track)
git commit -am "fix: perbaiki bug navbar"

# Lihat history commit
git log
git log --oneline           # ringkas 1 baris per commit
git log --oneline --graph   # tampilkan graph branch

# Lihat perubahan detail
git diff                    # perubahan belum di-staging
git diff --staged           # perubahan yang sudah di-staging
📌 Bagian Penting: git add cuma menandai file untuk disimpan di commit berikutnya (staging) — file itu belum benar-benar tersimpan ke history sampai kamu jalankan git commit. Ini beda tahap yang sering bikin bingung pemula.
🐞 Error Umum di Bagian Ini
nothing to commit, working tree clean
Mencoba commit padahal tidak ada perubahan file yang di-staging.
Fix: pastikan sudah edit file dan menjalankan git add sebelum git commit.
fatal: not a git repository (or any of the parent directories): .git
Menjalankan perintah git di folder yang belum di-git init.
Fix: jalankan git init dulu di folder project, atau pastikan kamu berada di folder yang benar.

Branch

Branch memungkinkan kamu mengerjakan fitur baru atau perbaikan tanpa mengganggu kode utama. Branch main biasanya adalah versi stabil/production.

💡 Kebiasaan bagus: jangan langsung coding di branch main. Buat branch baru untuk setiap fitur atau bugfix.
bash
# Lihat semua branch
git branch
git branch -a    # termasuk remote branch

# Buat branch baru
git branch fitur-login

# Pindah ke branch
git checkout fitur-login

# Buat + langsung pindah (shortcut)
git checkout -b fitur-navbar
# atau (Git modern)
git switch -c fitur-navbar

# Merge branch ke main
git checkout main
git merge fitur-login

# Hapus branch (setelah merge)
git branch -d fitur-login

# Lihat branch aktif
git branch --show-current
📌 Bagian Penting: Sebelum git merge, pastikan kamu sudah git checkout ke branch tujuan (biasanya main) — bukan branch fitur yang mau digabungkan. Salah arah ini kesalahan umum pemula.
🐞 Error Umum di Bagian Ini
CONFLICT (content): Merge conflict in index.html
Dua branch mengubah bagian yang sama di file yang sama, Git tidak tahu versi mana yang harus dipakai.
Fix: buka file yang konflik, cari tanda <<<<<<<, pilih/gabungkan kode yang benar secara manual, hapus tanda konfliknya, lalu git add dan git commit lagi.
error: branch 'fitur-login' not found
Nama branch yang diketik salah/typo, atau branch memang belum pernah dibuat.
Fix: cek nama branch yang benar dengan git branch dulu.

Remote & Push

Remote adalah versi repository yang ada di server (GitHub). Kamu sinkronisasi antara repo lokal dan remote dengan perintah push, pull, dan fetch.

  • git remote add — hubungkan repo lokal ke GitHub
  • git push — upload commit lokal ke GitHub
  • git pull — download + merge perubahan dari GitHub
  • git fetch — download tapi belum merge
  • git clone — salin repo dari GitHub ke lokal
bash
# Hubungkan repo lokal ke GitHub
git remote add origin https://github.com/username/nama-repo.git

# Lihat remote yang terhubung
git remote -v

# Push ke GitHub (pertama kali)
git push -u origin main

# Push selanjutnya (sudah diset upstream)
git push

# Pull (ambil perubahan dari GitHub)
git pull

# Clone repo orang lain / repo kamu sendiri
git clone https://github.com/username/nama-repo.git

# Clone ke folder dengan nama berbeda
git clone https://github.com/username/repo.git nama-folder
📌 Bagian Penting: Sebelum git push, biasakan git pull dulu — supaya kamu dapat perubahan terbaru dari tim (kalau ada) dan menghindari konflik yang tidak perlu.
🐞 Error Umum di Bagian Ini
! [rejected] main -> main (fetch first)
Ada commit baru di GitHub yang belum ada di repo lokalmu — Git menolak push supaya tidak menimpa perubahan orang lain.
Fix: jalankan git pull dulu untuk menggabungkan perubahan terbaru, baru git push lagi.
fatal: Authentication failed for 'https://github.com/...'
GitHub sudah tidak menerima login pakai password biasa — butuh Personal Access Token atau SSH key.
Fix: buat Personal Access Token di GitHub Settings → Developer Settings, pakai token itu sebagai pengganti password.

GitHub

GitHub bukan hanya tempat simpan kode. Ada banyak fitur kolaborasi yang wajib kamu kenal:

  • Repository — folder project kamu di GitHub, bisa public atau private
  • Fork — salin repo orang lain ke akun kamu untuk dimodifikasi
  • Pull Request (PR) — ajukan perubahan kode untuk di-review dan di-merge
  • Issues — laporan bug, fitur request, atau diskusi tentang project
  • GitHub Pages — host website gratis langsung dari repo
  • Actions — otomasi (CI/CD) yang jalan setiap ada push
💡 Konvensi pesan commit: gunakan prefix seperti feat:, fix:, docs:, refactor: biar rapi dan mudah dibaca.
bash
# Alur kontribusi ke repo orang lain
# 1. Fork di GitHub (klik tombol Fork)
# 2. Clone fork kamu
git clone https://github.com/KAMU/repo-orang-lain.git

# 3. Buat branch baru
git checkout -b perbaikan-typo

# 4. Edit kode, lalu commit
git add .
git commit -m "fix: perbaiki typo di README"

# 5. Push ke fork kamu
git push origin perbaikan-typo

# 6. Buka GitHub → buat Pull Request ke repo asli

# Sinkronisasi fork dengan repo asli
git remote add upstream https://github.com/ORIGINAL/repo.git
git fetch upstream
git merge upstream/main
📌 Bagian Penting: ForkClone. Fork membuat salinan repo di akun GitHub-mu sendiri (di server), sedangkan clone mengunduh repo (fork atau bukan) ke komputermu. Alur kontribusi open-source biasanya: fork dulu, baru clone hasil fork-nya.
🐞 Error Umum di Bagian Ini
remote: Permission to ORIGINAL/repo.git denied
Mencoba push langsung ke repo asli orang lain, padahal seharusnya push ke hasil fork milikmu sendiri.
Fix: pastikan git remote -v menunjuk ke fork-mu (username kamu), bukan repo asli, sebelum push.

.gitignore

File .gitignore berisi daftar file dan folder yang tidak ingin kamu commit ke Git. Biasanya berisi file environment, dependency, dan file build.

💡 Generate .gitignore otomatis di gitignore.io — tinggal pilih bahasa/framework, langsung jadi.
bash
# Contoh isi .gitignore untuk project web

# Dependency
node_modules/
vendor/

# Environment (JANGAN pernah commit ini!)
.env
.env.local
.env.production

# Build output
dist/
build/
.next/
out/

# OS files
.DS_Store        # macOS
Thumbs.db        # Windows
desktop.ini

# Editor
.vscode/
.idea/
*.swp

# Log files
*.log
npm-debug.log*
bash
# Kalau sudah terlanjur commit file yang harusnya di-ignore
git rm --cached nama-file.env       # hapus dari tracking (file tetap ada di lokal)
git rm --cached -r node_modules/    # folder (recursive)
git commit -m "chore: hapus file dari tracking"
📌 Bagian Penting: .gitignore cuma mencegah file yang belum pernah di-commit. Kalau file sensitif (mis. .env berisi password) sudah terlanjur ter-commit sebelumnya, menambahkannya ke .gitignore saja tidak cukup — kamu harus hapus dari tracking dengan git rm --cached seperti contoh di atas, dan idealnya ganti kredensial yang sudah terekspos.
🐞 Error Umum di Bagian Ini
(tidak error, tapi file .env tetap ter-track walau sudah ditambahkan ke .gitignore)
.gitignore hanya berlaku untuk file yang belum pernah di-add/commit sebelumnya.
Fix: jalankan git rm --cached nama-file untuk melepas file itu dari tracking, baru commit ulang.

🚀 Mini Project: Alur Kerja Fitur Baru

Simulasikan alur kerja standar tim developer: dari bikin branch, commit, sampai push dan buat Pull Request.

💡 Skenario Lengkap
bash
# 1. Pastikan branch main up-to-date
git checkout main
git pull

# 2. Buat branch baru untuk fitur
git checkout -b fitur-dark-mode

# 3. Edit kode kamu... lalu cek statusnya
git status

# 4. Staging & commit
git add .
git commit -m "feat: tambah toggle dark mode"

# 5. Push branch ke GitHub
git push -u origin fitur-dark-mode

# 6. Buka GitHub, buat Pull Request dari fitur-dark-mode ke main

# 7. Setelah PR di-review dan di-approve, merge di GitHub
# 8. Sinkronkan lokal setelah merge
git checkout main
git pull
git branch -d fitur-dark-mode  # hapus branch yang sudah tidak dipakai
📌 Tantangan: Coba praktikkan alur ini langsung di Simulasi Terminal di bawah — mulai dari git init sampai git push.

✦ Simulasi Terminal

Ketik perintah Git di bawah dan lihat outputnya. Ini simulasi interaktif — cocok buat latihan sebelum pakai di terminal asli.

🖥️ Git Terminal Simulator
Selamat datang di Git Terminal Simulator!
Ketik perintah git di bawah. Coba: git init, git status, git add ., git commit -m "pesan", git log
──────────────────────────────────────────
~/project $
💡 Perintah yang didukung: git init git status git add git commit git log git branch git checkout git switch git merge git remote git push git pull git clone git diff git stash clear
🎓

Selamat!

Telah menyelesaikan seluruh materi

Git & GitHub Beginner — web-ngoding
🔄 Versi baru tersedia