🐙 Git dan GitHub CLI

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Diterbitkan

31 Agustus 2025

Perintah dasar dan lanjutan Git untuk kontrol versi, branching, repositori remote, stash, tag, dan GitHub CLI.

🔹 Perintah Dasar

Perintah

Contoh

Deskripsi

git add Tambahkan file ke staging area
git add file.txt

Stage file tertentu untuk commit berikutnya

git add .

Stage semua perubahan di direktori saat ini dan di bawahnya

git add -p

Pilih secara interaktif bagian file mana yang akan di-stage (berguna untuk commit parsial)

git clone Kloning repositori ke direktori baru
git clone -b branch_name URL

Kloning hanya branch tertentu (bukan default)

git clone --depth 1 URL

Kloning hanya commit terbaru, membuat salinan dangkal untuk menghemat waktu dan ruang

git commit Rekam perubahan ke repositori
git commit -m "Initial commit"

Commit dengan pesan tanpa membuka editor

git commit -a -m "Fix bugs"

Stage dan commit semua file yang dimodifikasi dengan pesan

git commit --amend

Perbarui commit terakhir (ubah pesan atau tambahkan perubahan)

git commit --fixup abc1234

Buat commit fixup untuk digabung otomatis saat rebase interaktif

git config Dapatkan dan atur opsi repositori atau global
git config --global user.name "Name"

Atur username Git global

git config --global user.email "email@example.com"

Atur email Git global

git config --list

Daftar semua pengaturan Git (nama, email, editor, dll.)

git diff Tampilkan perubahan antar commit, commit dan working tree, dll.
git diff HEAD

Tampilkan perubahan sejak commit terakhir (unstaged changes)

git diff --staged

Tampilkan apa yang akan termasuk di commit berikutnya

git diff --word-diff HEAD~1

Tampilkan perubahan dengan perbedaan per kata

git grep Cari di dalam file repositori
git grep "functionName"

Cari semua penyebutan functionName di semua file proyek

git grep -n "TODO"

Cari baris yang mengandung TODO dan tampilkan nomor baris (berguna untuk menemukan catatan kode)

git grep -i "login"

Cari kata login tanpa memperhatikan huruf besar kecil (cocok dengan Login, LOGIN, login, dll.)

git init Buat repositori Git kosong atau inisialisasi ulang yang sudah ada
git init my-project

Inisialisasi repo baru di direktori my-project

git init --bare

Inisialisasi repositori bare

git log Tampilkan log commit
git log --oneline

Tampilkan riwayat commit dalam format ringkas satu baris

git log --graph --all

Tampilkan semua branch dalam grafik visual commit

git log -p --stat

Tampilkan patch dan statistik perubahan file untuk commit

git reset Batalkan stage file, tetapi simpan perubahan di working directory
git reset HEAD file.txt

Hapus file dari staging (perubahan tetap ada)

git reset --hard HEAD~1

Kembali satu commit dan hapus semua perubahan (tidak bisa dibalik!)

git reset --soft HEAD~1

Batalkan commit terakhir tetapi simpan perubahan siap di-commit lagi

git reset --mixed HEAD~1

Batalkan commit tetapi simpan perubahan tidak di-stage di working directory

git show Tampilkan berbagai jenis objek
git show <commit_hash>

Tampilkan perubahan dan pesan dari commit tertentu

git show HEAD~1

Tampilkan commit sebelumnya sebelum commit saat ini

git show --stat

Tampilkan ringkasan perubahan file untuk commit terbaru

git status Tampilkan status working tree
git status -s

Tampilkan status dalam format singkat

git status -b

Tampilkan branch saat ini dan status file

🌿 Branching dan Merging

Perintah

Contoh

Deskripsi

git branch Buat, daftar, atau hapus branch
git branch new-feature

Buat branch baru bernama new-feature

git branch -d old-feature

Hapus branch lokal bernama old-feature

git checkout Beralih branch atau pulihkan file dari commit lain
git checkout main

Beralih ke branch main

git checkout -b new-branch

Buat dan beralih ke branch baru bernama new-branch

git switch Beralih branch (alternatif sederhana untuk checkout)
git switch main

Beralih ke branch main

git switch -c feature-x

Buat dan beralih ke branch baru bernama feature-x

git switch new-feature

Beralih ke branch yang sudah ada bernama new-feature

git merge Gabungkan perubahan dari branch lain ke branch saat ini
git merge new-feature

Gabungkan branch new-feature ke branch saat ini

git merge --no-ff new-feature

Selalu buat commit merge (bahkan jika fast-forward memungkinkan)

git merge --abort

Batalkan merge dan kembalikan perubahan jika terjadi konflik

git rebase Pindahkan atau terapkan ulang commit ke base commit baru
git rebase main

Terapkan ulang commit branch Anda di atas branch main

git rebase -i HEAD~3

Edit interaktif 3 commit terakhir

git rebase --abort

Hentikan dan batalkan rebase yang sedang berlangsung

git rebase -i --autosquash HEAD~5

Gabungkan otomatis commit yang ditandai sebagai fixup atau squash selama rebase interaktif

git cherry-pick Terapkan commit tertentu dari branch lain
git cherry-pick <hash>

Terapkan commit tertentu (berdasarkan hash) ke branch saat ini

git cherry-pick --continue

Lanjutkan cherry-pick setelah menyelesaikan konflik

git cherry-pick A^..B

Terapkan rentang commit dari A (tidak termasuk) hingga B (termasuk)

📡 Repositori Remote

Perintah

Contoh

Deskripsi

git remote Kelola tautan ke repositori remote (seperti GitHub)
git remote -v

Tampilkan nama remote dan URL-nya

git remote add origin URL

Tambahkan repositori remote bernama origin

git pull Unduh dan gabungkan otomatis perubahan dari branch remote
git pull origin main

Fetch dan gabungkan perubahan dari branch main remote ke branch Anda

git pull --rebase origin main

Fetch dan rebase branch Anda di atas branch remote alih-alih merge

git push Unggah perubahan lokal Anda ke repositori remote
git push origin main

Push branch lokal main ke remote origin

git fetch Unduh perubahan dari remote tanpa menggabungkan
git fetch origin

Fetch semua pembaruan dari remote origin, tetapi jangan terapkan dulu

git fetch origin main

Fetch hanya branch main dari remote

git fetch --all

Fetch pembaruan dari semua remote

git fetch --prune

Bersihkan branch yang dihapus — hapus referensi lokal ke branch yang dihapus di remote

git fetch --dry-run

Tampilkan apa yang akan di-fetch, tanpa benar-benar mengunduh apapun

git fetch origin +main

Paksa perbarui branch tracking lokal (origin/main), menimpa konflik

📦 Stash dan Pembersihan

Perintah

Contoh

Deskripsi

git stash Simpan sementara perubahan yang belum di-commit (pekerjaan sedang berlangsung)
git stash

Simpan file yang dimodifikasi dan di-stage, lalu kembalikan working directory ke commit terakhir

git stash apply

Terapkan kembali stash terbaru (stash tetap tersimpan)

git stash pop

Terapkan dan hapus stash terbaru

git stash list

Tampilkan daftar semua perubahan yang di-stash

git stash branch feature-fix

Buat branch baru dan terapkan stash terbaru ke branch tersebut

git clean Hapus permanen file yang tidak dilacak (tidak ada di Git)
git clean -f

Hapus file yang tidak dilacak di direktori saat ini

git clean -fd

Hapus file dan folder yang tidak dilacak

git clean -n

Pratinjau apa yang akan dihapus (dry run aman)

🏷️ Tag

Perintah

Contoh

Deskripsi

git tag Buat, daftar, atau hapus tag untuk menandai titik tertentu dalam riwayat (seperti rilis)
git tag -a v1.0 -m "Version 1.0"

Buat tag annotated bernama v1.0 dengan pesan (disimpan sebagai objek Git penuh, bagus untuk rilis)

git tag -d v1.0

Hapus tag lokal bernama v1.0 (tidak memengaruhi remote)

git push Unggah commit, branch, dan tag dari lokal ke repositori remote
git push origin --tags

Push semua tag lokal ke remote (berguna setelah menandai banyak versi)

git push origin v1.0

Push tag tertentu (misalnya v1.0) ke repositori remote

git push origin :refs/tags/v1.0

Hapus tag remote v1.0 (perhatikan sintaks titik dua)

🛠️ Resolusi Konflik

Perintah

Contoh

Deskripsi

git mergetool Buka alat visual untuk membantu menyelesaikan konflik merge
git mergetool --tool=meld

Gunakan alat merge tertentu (seperti Meld) untuk memperbaiki konflik

git rerere Biarkan Git mengingat bagaimana Anda menyelesaikan konflik merge sebelumnya
git config --global rerere.enabled true

Aktifkan penggunaan ulang otomatis resolusi konflik sebelumnya

git rerere status

Tampilkan file yang memiliki resolusi konflik tersimpan

git rerere diff

Tampilkan perubahan yang disimpan Git untuk penggunaan ulang di masa depan

⚙️ Perintah Lanjutan

Perintah

Contoh

Deskripsi

git bisect Gunakan binary search untuk menemukan commit yang memperkenalkan bug
git bisect start

Mulai binary search antara commit baik dan buruk untuk menemukan bug

git bisect bad

Tandai commit saat ini sebagai “buruk” (mengandung bug)

git bisect good <commit>

Tandai commit “baik” yang diketahui di mana bug tidak ada

git blame Tampilkan siapa yang terakhir mengubah setiap baris file, dengan revisi dan penulis
git blame file.txt

Tampilkan penulis dan info commit untuk setiap baris dalam file

git blame -L 10,20 file.txt

Tampilkan info blame hanya untuk baris 10 hingga 20

git blame --show-email file.txt

Tampilkan alamat email penulis bersama perubahan baris

git reflog Lihat dan kelola reference log (reflog) pergerakan branch dan HEAD
git reflog show main@{1.week.ago}

Lihat ke mana branch main menunjuk satu minggu yang lalu

git reflog expire --expire=30.days --dry-run

Pratinjau reflog yang lebih lama dari 30 hari yang bisa dibersihkan (tidak ada perubahan yang dibuat)

git reflog delete HEAD@{2}

Hapus entry reflog tertentu (gunakan hati-hati, dapat memengaruhi pemulihan)

git submodule Tambah, inisialisasi, perbarui, atau inspeksi submodule (repositori di dalam repositori)
git submodule add URL path

Tambahkan repositori eksternal sebagai submodule di path tertentu

git submodule update --init

Inisialisasi dan unduh semua submodule yang tercantum dalam repositori

git submodule foreach git pull

Jalankan git pull di dalam setiap submodule untuk memperbarui ke commit terbaru

git submodule sync --recursive

Sinkronkan URL submodule setelah perubahan di file .gitmodules

git submodule update --remote --merge

Perbarui submodule ke commit terbaru dari branch remote mereka

git archive Buat arsip (zip, tar, dll.) dari file commit atau branch tertentu
git archive --format=zip HEAD > archive.zip

Buat arsip ZIP dari file proyek saat ini di HEAD

git archive -o release.tar.gz HEAD

Buat arsip .tar.gz terkompres dari HEAD saat ini

git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz

Buat arsip .tar.gz terkompres dari proyek saat ini, menempatkan semua file di dalam folder bernama project/ dalam arsip

git gc Bersihkan file yang tidak perlu dan optimalkan repositori untuk performa
git gc --aggressive

Lakukan pembersihan dan optimisasi menyeluruh (bisa lambat tapi efektif)

git gc --prune=now

Hapus semua objek yang tidak dapat dijangkau segera (berbahaya jika tidak yakin)

git shortlog Ringkasan cepat penulis dan commit mereka
git shortlog -e

Tampilkan daftar penulis dengan alamat email mereka (misalnya, untuk menganalisis siapa yang berkontribusi dan seberapa banyak)

git shortlog -s -n

Tampilkan berapa banyak commit yang dibuat setiap penulis, diurutkan berdasarkan jumlah commit

git shortlog -sne

Sama seperti di atas, tetapi juga menyertakan nama dan email — berguna untuk pelacakan aktivitas detail

git revert Buat commit baru yang membatalkan perubahan dari commit sebelumnya tanpa menulis ulang riwayat
git revert HEAD

Batalkan commit terakhir dengan membuat commit baru yang membalikkan perubahannya

git revert <commit_hash>

Batalkan commit tertentu berdasarkan hash, dengan aman menambahkan commit baru yang membalikkan

🐙 GitHub CLI

gh memungkinkan Anda mengelola GitHub langsung dari terminal.

Perintah

Contoh

Deskripsi

gh auth login Autentikasi dengan host GitHub untuk memungkinkan perintah CLI berinteraksi dengan akun Anda
gh auth login --with-token < mytoken.txt

Autentikasi menggunakan personal access token yang disimpan dalam file (mytoken.txt)

gh auth login --hostname enterprise.internal

Autentikasi ke server GitHub Enterprise (bukan github.com)

gh repo clone Kloning repositori GitHub ke mesin lokal Anda
gh repo clone user/repo

Kloning repositori milik user ke folder bernama repo

gh repo clone cli/cli -- --depth=1

Kloning repositori tetapi hanya unduh commit terbaru untuk kloning lebih cepat dan kecil

gh repo clone cli/cli workspace/cli

Kloning repositori ke folder khusus workspace/cli

gh issue list Daftar issue dalam repositori GitHub, dapat difilter berdasarkan berbagai kriteria
gh issue list --assignee "@me"

Daftar issue yang ditugaskan kepada Anda

gh issue list --state all

Daftar semua issue terlepas dari status (open atau closed)

gh issue list --search "error no:assignee sort:created-asc"

Daftar issue yang cocok dengan “error”, tanpa assignment, diurutkan berdasarkan tanggal pembuatan naik

gh pr create Buat pull request di GitHub melalui CLI
gh pr create --title "..."

Buat pull request dengan judul tertentu

gh pr create --project "Roadmap"

Hubungkan pull request ke proyek GitHub bernama “Roadmap”

gh pr create --base develop --head monalisa:feature

Buat PR dari branch feature di fork monalisa ke branch develop

gh repo create Buat repositori GitHub baru dari CLI
gh repo create my-project

Buat repositori baru bernama my-project di GitHub (dengan prompt interaktif)

gh repo create my-project --public --clone

Buat repositori publik dan kloning secara lokal

gh repo create my-project --private --source=. --remote=upstream

Buat repositori remote privat dari folder saat ini dan tambahkan remote bernama upstream

💡 Alias Git (Jalan Pintas Berguna)

Atur alias yang nyaman untuk mempercepat perintah Git umum:

git config --global alias.br branch                                       # jalan pintas untuk: git branch
git config --global alias.ci commit                                       # jalan pintas untuk: git commit
git config --global alias.co checkout                                     # jalan pintas untuk: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # grafik riwayat yang rapi
git config --global alias.last "log -1 HEAD"                              # tampilkan commit terakhir
git config --global alias.st status                                       # jalan pintas untuk: git status

🚀 Perintah Git Lanjutan untuk Profesional

Perintah

Contoh

Deskripsi

git filter-repo Alat yang kuat dan cepat untuk menulis ulang riwayat Git guna menghapus atau memodifikasi file, kepenulisan, atau path; menggantikan git filter-branch dengan kecepatan dan keamanan yang lebih baik
git filter-repo --path secret.txt --invert-paths

Tulis ulang riwayat repositori secara efisien untuk menghapus file atau direktori sensitif tanpa masalah performa git filter-branch. Gunakan dengan hati-hati

git filter-repo --replace-text replacements.txt

Ganti string atau pola secara massal di seluruh riwayat (misalnya, sanitasi kredensial)

git filter-repo --subdirectory-filter src

Ekstrak riwayat subdirektori ke repositori baru, dengan metadata commit tetap terjaga

git worktree Kelola banyak working directory yang terhubung ke satu repositori, memungkinkan pekerjaan paralel di berbagai branch tanpa kloning
git worktree add ../feature feature-branch

Buat working tree tambahan yang terhubung ke repositori sama, memungkinkan checkout branch paralel tanpa kloning

git worktree list

Daftar semua worktree aktif, path, dan branch terkait

git worktree remove ../feature

Hapus worktree yang tidak lagi diperlukan dengan aman

git replace Buat referensi sementara untuk menggantikan objek yang ada, memungkinkan manipulasi riwayat lokal non-destruktif untuk pengujian
git replace <old_commit> <new_commit>

Tukar sementara satu commit dengan commit lain di repo lokal, berguna untuk pengujian atau patching riwayat tanpa menulis ulang

git replace --list

Tampilkan semua referensi pengganti aktif

git replace -d <replace_ref>

Hapus referensi pengganti tertentu untuk mengembalikan perilaku

git stash Simpan sementara perubahan yang belum di-commit ke stack, memungkinkan berpindah konteks tanpa commit pekerjaan yang belum selesai
git stash push -p

Pilih interaktif bagian perubahan untuk disimpan, memberi kontrol lebih detail

git stash push -m "WIP selective stash"

Buat stash dengan pesan khusus agar mudah diidentifikasi

git stash apply stash@{2}

Terapkan stash tertentu dari daftar tanpa menghapusnya

git rebase Terapkan ulang commit di atas base lain, menjaga riwayat proyek tetap bersih dan linear dengan opsi pengeditan interaktif
git rebase --interactive --autosquash

Mulai rebase interaktif yang otomatis mengurutkan ulang dan squash commit bertanda fixup atau squash

git rebase -i --autosquash HEAD~10

Otomatis urutkan ulang dan squash commit fixup/squash, membersihkan riwayat sebelum push

git commit --fixup <commit>

Buat commit fixup yang akan digabung otomatis saat rebase interaktif

git commit --squash <commit>

Buat commit squash untuk digabung dengan commit tertentu saat rebase

git bisect Alat binary search untuk mengidentifikasi commit yang memperkenalkan bug dengan menguji commit berturut-turut
git bisect run

Otomatisasi proses bisect dengan menjalankan skrip uji pada setiap commit untuk menemukan commit yang bermasalah

git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh

Otomatisasi bisection dengan skrip uji di setiap commit, mempercepat identifikasi bug

git bisect visualize

Buka alat grafis untuk memvisualisasikan proses bisect

git bisect reset

Keluar dari mode bisect dan kembali ke HEAD asli

git commit Rekam perubahan ke repositori dengan opsi detail seperti amend, sign, fixup, dan kustomisasi pesan untuk menjaga riwayat berkualitas tinggi
git commit --gpg-sign

Buat commit yang ditandatangani dengan kunci GPG Anda untuk verifikasi kriptografis keaslian dan kepenulisan

git commit -S -m "Signed commit"

Tandatangani commit dengan kunci GPG Anda untuk memastikan integritas dan verifikasi kepenulisan

git config --global user.signingkey <key_id>

Konfigurasikan kunci GPG yang digunakan untuk menandatangani commit secara global

git log --show-signature

Verifikasi dan tampilkan info tanda tangan GPG untuk commit

git reflog Catat pembaruan HEAD dan branch, penting untuk memulihkan commit yang hilang dan memahami pergerakan riwayat lokal
git reset --hard HEAD@{3}

Reset branch saat ini ke status sebelumnya dari reflog untuk memulihkan perubahan

git reflog expire --expire=now --all

Segera hapus semua entry reflog, membersihkan riwayat reflog (gunakan dengan hati-hati)

🧰 Tips Workflow Pro dan Otomatisasi

Topik

Perintah / Contoh

Penjelasan & Tips Pro

Pembersihan Repo Agresif

git gc --aggressive --prune=now

Melakukan garbage collection mendalam dan memangkas objek yang tidak dapat dijangkau segera untuk optimisasi repositori. Gunakan saat maintenance

Worktree Branch Paralel

git worktree add ../feature-branch feature

Simpan banyak working tree untuk pengembangan fitur secara bersamaan, menghindari overhead kloning

Riwayat Bersih dan Linear

git rebase -i --autosquash

Sebelum push, lakukan rebase interaktif dengan autosquash agar riwayat tetap bersih dan mudah dibaca

Commit Aman

git commit -S

Tandatangani commit dengan GPG untuk meningkatkan kepercayaan dalam repositori bersama, wajib di banyak lingkungan enterprise

Bisect Otomatis

git bisect run ./test-script.sh

Otomatisasi pencarian bug dengan menjalankan skrip uji pada setiap kandidat commit selama bisect

Cache Resolusi Konflik

git config --global rerere.enabled true

Aktifkan penggunaan ulang resolusi konflik untuk mempercepat penyelesaian konflik merge berulang saat rebase atau merge

Alias dan Hook Bersama

Simpan alias Git umum dan commit hook dalam repo bersama atau pipeline CI untuk menegakkan standar tim dan meningkatkan produktivitas

Sumber Daya Tambahan

🧠 Tip

Jangan coba hafalkan semuanya. Gunakan --help, jelajahi, dan berlatih secara rutin:

git help <command>
git status

🌐 Tautan Berguna

📘 Dokumentasi Git Resmi — manual detail untuk semua perintah Git:
https://git-scm.com/docs

📙 Learn Git Branching — tutorial visual interaktif untuk menguasai konsep branching:
https://learngitbranching.js.org

📕 Buku Pro Git (gratis, oleh Scott Chacon & Ben Straub):
https://git-scm.com/book

📗 Git Cheatsheet (referensi ringkas resmi):
https://education.github.com/git-cheat-sheet-education.pdf