🐙 Git dan GitHub CLI
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 |
|
git grep -n "TODO" |
Cari baris yang mengandung |
|
git grep -i "login" |
Cari kata |
|
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 |
|
git branch -d old-feature |
Hapus branch lokal bernama |
|
git checkout |
Beralih branch atau pulihkan file dari commit lain | |
git checkout main |
Beralih ke branch |
|
git checkout -b new-branch |
Buat dan beralih ke branch baru bernama |
|
git switch |
Beralih branch (alternatif sederhana untuk checkout) |
|
git switch main |
Beralih ke branch |
|
git switch -c feature-x |
Buat dan beralih ke branch baru bernama |
|
git switch new-feature |
Beralih ke branch yang sudah ada bernama |
|
git merge |
Gabungkan perubahan dari branch lain ke branch saat ini | |
git merge new-feature |
Gabungkan branch |
|
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 |
|
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 |
📡 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 |
|
git pull |
Unduh dan gabungkan otomatis perubahan dari branch remote | |
git pull origin main |
Fetch dan gabungkan perubahan dari branch |
|
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 |
|
git fetch |
Unduh perubahan dari remote tanpa menggabungkan | |
git fetch origin |
Fetch semua pembaruan dari remote |
|
git fetch origin main |
Fetch hanya branch |
|
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 ( |
📦 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 |
|
git tag -d v1.0 |
Hapus tag lokal bernama |
|
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 |
|
git push origin :refs/tags/v1.0 |
Hapus tag remote |
🛠️ 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 |
|
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 submodule sync --recursive |
Sinkronkan URL submodule setelah perubahan di file |
|
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 |
|
git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz |
Buat 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
ghmemungkinkan 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 ( |
|
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 |
|
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 |
|
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 |
|
gh repo create |
Buat repositori GitHub baru dari CLI | |
gh repo create my-project |
Buat repositori baru bernama |
|
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 |
💡 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-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