Cheat sheet

Perintah Git: contekan dengan contoh untuk pekerjaan harian

Diperbarui: · Skillaria.Top

Perintah Git yang paling dasar adalah git init dan git clone untuk membuat repositori, git status, git add, dan git commit untuk menyimpan perubahan, git branch, git switch, dan git merge untuk bekerja dengan branch, git push, git fetch, dan git pull untuk sinkronisasi dengan server, serta git restore, git reset, dan git revert untuk membatalkan perubahan.

Berikut contekan Git yang praktis: perintah dikelompokkan menurut tugas, setiap perintah disertai contoh dan penjelasan singkat. Contekan ini sebaiknya dibuka di samping terminal, karena hampir semua hal yang dilakukan developer dengan Git dalam sehari tercakup dalam 20 sampai 30 perintah di tabel-tabel ini.

Agar perintah-perintah ini mudah dipahami, ingat tiga area: direktori kerja (berkas di disk), index atau staging area (yang akan masuk ke commit berikutnya), dan repositori (riwayat commit di folder .git). Sebagian besar perintah Git memindahkan perubahan di antara ketiga area ini, atau antara repositori lokal dan remote.

Konfigurasi Git

Perintah berikut dijalankan sekali setelah instalasi. Flag --global menyimpan pengaturan di ~/.gitconfig dan berlaku untuk semua repositori pengguna; tanpa flag itu, pengaturan hanya berlaku untuk repositori saat ini.

PerintahFungsi
git config --global user.name "Ivan Petrov"Nama penulis commit
git config --global user.email "ivan@example.com"E-mail penulis commit
git config --global init.defaultBranch mainNama branch default untuk repositori baru
git config --global core.editor "code --wait"Editor untuk pesan commit (di sini VS Code)
git config --global pull.rebase falsePerilaku default git pull adalah merge
git config --global core.autocrlf inputMengubah CRLF menjadi LF saat commit (macOS/Linux; di Windows biasanya true)
git config --list --show-originMenampilkan semua pengaturan beserta berkas asalnya
git config --global alias.st statusAlias: git st sebagai pengganti git status
git --versionVersi Git yang terpasang
git help commitPanduan lengkap untuk satu perintah (atau git commit -h untuk ringkasan)

Membuat dan mengkloning repositori

PerintahFungsi
git initMembuat repositori kosong (folder .git) di direktori saat ini
git init my-projectMembuat direktori my-project dan repositori di dalamnya
git clone https://github.com/user/repo.gitMenyalin repositori remote beserta seluruh riwayatnya
git clone git@github.com:user/repo.git appMengkloning lewat SSH ke folder app
git clone --depth 1 URLKlon dangkal: hanya commit terakhir, cepat dan hemat tempat
git clone -b develop URLMengkloning dan langsung berpindah ke branch develop

Siklus dasar: status, add, commit

Ini inti pekerjaan harian: melihat apa yang berubah, memilih yang diperlukan ke index, dan mencatatnya dalam commit.

PerintahFungsi
git statusKeadaan: berkas yang berubah, sudah di-stage, dan tidak dilacak
git status -sFormat singkat: M — berubah, A — ditambahkan, ?? — tidak dilacak
git add file.txtMenambahkan berkas ke index
git add .Menambahkan semua perubahan di direktori saat ini dan di bawahnya, termasuk penghapusan
git add -AMenambahkan semua perubahan di seluruh repositori
git add -pMemilih potongan (hunk) perubahan secara interaktif
git commit -m "Tambahkan form login"Membuat commit dari index dengan pesan
git commit -am "Perbaiki salah ketik"Menambahkan semua berkas yang dilacak yang berubah lalu commit; berkas baru tidak ikut
git commit --amendMenulis ulang commit terakhir: menambahkan yang terlupa dari index atau memperbaiki pesan
git commit --amend --no-editMenambahkan ke commit terakhir tanpa mengubah pesannya
git rm file.txtMenghapus berkas dari disk dan dari index
git rm --cached secret.envBerhenti melacak berkas, tetapi berkas tetap di disk
git mv old.js new.jsMengganti nama atau memindahkan berkas

Alur tipikal:

git status
git add src/login.js src/login.css
git diff --staged          # periksa apa yang akan masuk ke commit
git commit -m "Tambahkan form login"

Jangan gunakan --amend pada commit yang sudah dikirim ke branch bersama: perintah itu membuat commit baru dengan hash berbeda, dan rekan Anda harus menangani riwayat yang berbeda.

Melihat riwayat dan perubahan

PerintahFungsi
git logRiwayat commit di branch aktif
git log --onelineSetiap commit dalam satu baris: hash pendek dan judul
git log --oneline --graph --allGraf semua branch di terminal
git log -p file.txtRiwayat berkas beserta diff setiap commit
git log --author="Ivan" --since="2 weeks ago"Filter berdasarkan penulis dan tanggal
git log -S "getUser"Commit yang menambah atau menghapus baris getUser
git log main..featureCommit yang ada di feature tetapi tidak di main
git diffPerubahan di direktori kerja yang belum masuk index
git diff --stagedPerubahan di index terhadap commit terakhir (sinonim --cached)
git diff main featureSelisih antara ujung dua branch
git diff HEAD~3 -- src/Perubahan di folder src selama tiga commit terakhir
git show a1b2c3dMetadata dan diff satu commit
git show HEAD:README.mdIsi berkas pada commit terakhir
git blame app.jsSiapa dan di commit mana setiap baris terakhir diubah
git shortlog -snJumlah commit per penulis

Referensi ke commit berguna di mana saja: HEAD adalah commit saat ini, HEAD~1 induknya, HEAD~3 tiga langkah ke belakang melalui induk pertama, dan HEAD^2 induk kedua dari commit merge.

Branch: membuat, berpindah, menghapus

Sejak versi 2.23, Git memiliki git switch untuk branch dan git restore untuk berkas, yang memisahkan tugas git checkout yang terlalu banyak fungsi. Bentuk lama tetap berfungsi.

PerintahFungsi
git branchDaftar branch lokal; yang aktif ditandai *
git branch -aBranch lokal dan remote (remote-tracking)
git branch -vvBranch dengan commit terakhir dan selisih ketertinggalan/kemajuan terhadap upstream
git branch feature/loginMembuat branch tanpa berpindah
git switch feature/loginBerpindah ke branch
git switch -c feature/loginMembuat branch dan berpindah (setara git checkout -b)
git switch -Kembali ke branch sebelumnya
git branch -m new-nameMengganti nama branch aktif
git branch -d feature/loginMenghapus branch jika sudah digabung
git branch -D feature/loginMenghapus branch secara paksa, meskipun belum digabung
git branch --mergedBranch yang sudah digabung ke branch aktif — kandidat untuk dihapus

Penggabungan dan rebase

PerintahFungsi
git merge featureMenggabungkan feature ke branch aktif (fast-forward jika memungkinkan)
git merge --no-ff featureSelalu membuat commit merge
git merge --squash featureMengumpulkan semua perubahan branch ke index sekaligus, lalu git commit
git merge --abortMembatalkan penggabungan yang konflik dan kembali ke keadaan semula
git rebase mainMemindahkan commit branch aktif ke atas main
git rebase -i HEAD~4Interaktif: menggabungkan (squash), mengganti nama, mengatur ulang, atau menghapus 4 commit terakhir
git rebase --continueMelanjutkan setelah konflik diselesaikan
git rebase --abortMembatalkan rebase sepenuhnya
git cherry-pick a1b2c3dMenerapkan satu commit ke branch aktif sebagai commit baru

Penyelesaian konflik saat penggabungan hampir selalu berbentuk sama:

git merge feature
# CONFLICT (content): Merge conflict in app.js
git status                 # berkas ada di bagian "both modified"
# edit app.js, hapus penanda <<<<<<< ======= >>>>>>>
git add app.js
git commit                 # Git menyiapkan pesan commit merge

Aturan utama rebase: jangan me-rebase commit yang sudah ada di branch bersama dan menjadi dasar kerja orang lain.

Kerja dengan repositori remote

PerintahFungsi
git remote -vDaftar remote beserta alamatnya
git remote add origin git@github.com:user/repo.gitMenghubungkan repositori remote dengan nama origin
git remote set-url origin NEW_URLMengganti alamat remote (misalnya dari HTTPS ke SSH)
git remote remove upstreamMemutus remote
git fetchMengunduh commit dan branch baru tanpa menyentuh berkas Anda
git fetch --pruneSama, plus menghapus referensi ke branch yang sudah dihapus di server
git pullgit fetch + penggabungan upstream ke branch aktif
git pull --rebasegit fetch + rebase commit Anda di atas hasil yang diunduh
git pushMengirim commit branch aktif ke upstream-nya
git push -u origin feature/loginPengiriman pertama branch sekaligus mengatur upstream
git push --force-with-leaseMenimpa branch remote hanya jika tidak ada commit baru dari orang lain di sana
git push origin --delete feature/loginMenghapus branch di server
git push --tagsMengirim semua tag lokal

Daripada git push --force, biasakan memakai --force-with-lease: jika rekan sudah mengirim sesuatu ke branch yang sama, perintah ini menolak menimpa pekerjaannya.

Membatalkan perubahan

Bagian yang paling menegangkan dalam Git. Pertanyaan kuncinya sebelum memilih perintah: perubahan itu baru ada di berkas, sudah di index, di commit lokal, atau di commit yang sudah dipublikasikan?

SituasiPerintah
Membatalkan perubahan di berkas (kembali seperti commit terakhir)git restore app.js
Mengeluarkan berkas dari index dan menyimpan perubahannyagit restore --staged app.js
Mengambil berkas dari commit tertentugit restore --source=a1b2c3d app.js
Membatalkan commit terakhir, perubahan tetap di indexgit reset --soft HEAD~1
Membatalkan commit terakhir, perubahan tetap di berkasgit reset HEAD~1 (mode --mixed default)
Menghapus commit terakhir beserta seluruh perubahannyagit reset --hard HEAD~1
Membatalkan commit yang sudah dipublikasikan dengan commit kebalikangit revert a1b2c3d
Membatalkan commit mergegit revert -m 1 <hash-merge>
Melihat berkas tidak dilacak yang akan dihapusgit clean -n
Menghapus berkas dan folder yang tidak dilacakgit clean -fd
Mencari commit yang «hilang» setelah reset atau rebasegit reflog, lalu git reset --hard HEAD@{2}

git reset --hard dan git clean -f menghapus perubahan yang belum di-commit secara permanen: reflog hanya menyimpan commit, bukan perubahan di direktori kerja. Sebelum menjalankannya, buat git stash, atau setidaknya jalankan git status.

Stash: menyimpan pekerjaan yang belum selesai

PerintahFungsi
git stashMenyimpan perubahan berkas yang dilacak dan mengosongkan direktori kerja
git stash push -u -m "wip: form"Menyimpan termasuk berkas tidak dilacak, dengan label
git stash listDaftar simpanan: stash@{0}, stash@{1}, …
git stash show -p stash@{0}Melihat diff simpanan
git stash popMengembalikan simpanan terakhir dan menghapusnya dari daftar
git stash apply stash@{1}Mengembalikan simpanan dan tetap menyimpannya di daftar
git stash drop stash@{1}Menghapus satu simpanan
git stash branch fix-formMembuat branch dari commit tempat stash dibuat, lalu menerapkannya

Tag dan rilis

PerintahFungsi
git tagDaftar tag
git tag -a v1.2.0 -m "Rilis 1.2.0"Tag beranotasi dengan penulis, tanggal, dan pesan
git tag v1.2.0 a1b2c3dTag ringan pada commit tertentu
git push origin v1.2.0Mengirim satu tag
git tag -d v1.2.0Menghapus tag secara lokal
git push origin --delete v1.2.0Menghapus tag di server
git describe --tagsTag terdekat dan jumlah commit sesudahnya, misalnya v1.2.0-3-ga1b2c3d

Perintah Git tingkat lanjut

PerintahFungsi
git bisect start, git bisect bad, git bisect good v1.1.0Pencarian biner untuk commit yang membawa error; akhirnya git bisect reset
git worktree add ../hotfix mainFolder kerja kedua dengan branch lain dari repositori yang sama
git submodule update --init --recursiveMengunduh submodul setelah kloning
git grep "TODO"Pencarian cepat di berkas yang dilacak
git format-patch -1 HEAD / git apply fix.patchMenyimpan commit sebagai patch dan menerapkan patch ke direktori kerja
git gcMengemas objek dan membersihkan repositori (biasanya Git melakukannya sendiri)

Kesalahan umum dan cara memperbaikinya

Commit dibuat di main, bukan di branch baru

Jika commit belum dikirim, buat branch di posisi commit itu, lalu mundurkan main:

git branch feature/login      # branch menunjuk ke commit Anda
git reset --hard HEAD~1       # main kembali satu langkah
git switch feature/login

Berkas yang terlupa tidak masuk ke commit terakhir

git add forgotten.js
git commit --amend --no-edit

Push ditolak: rejected, non-fast-forward

Di server ada commit yang belum Anda miliki. Ambil dulu, baru kirim:

git pull --rebase
git push

Berkas berisi kata sandi ter-commit tanpa sengaja

Hentikan pelacakannya dan tambahkan ke .gitignore: git rm --cached .env, lalu commit. Jika commit sudah dikirim, anggap rahasia itu bocor dan buat yang baru; dari riwayat, rahasia itu tidak hilang begitu saja.

Ringkasan

Untuk pekerjaan harian, sekumpulan kecil perintah sudah cukup: status, add, commit, switch, merge, pull, push, dan log --oneline. Perintah pembatalan — restore, reset, revert — dipilih sesuai apakah commit sudah dipublikasikan, dan reflog diingat sebagai jaring pengaman terakhir. Semua perintah dalam contekan ini dibahas dengan praktik dalam kursus Git, tempat Anda mencobanya langsung di repositori sendiri.

Pertanyaan umum

Berapa banyak perintah Git yang perlu dikuasai pemula?

Untuk memulai cukup 10 sampai 12: init, clone, status, add, commit, log, diff, branch, switch, merge, pull, dan push. Sisanya dipelajari saat kebutuhan muncul.

Apa bedanya git switch dengan git checkout?

git switch hanya berpindah dan membuat branch, sedangkan git checkout juga memulihkan berkas. Pemisahan menjadi switch dan restore dibuat agar tidak keliru menimpa perubahan karena salah mengira nama branch sebagai berkas.

Bagaimana cara melihat bantuan untuk perintah Git tertentu?

Jalankan git help nama-perintah untuk panduan lengkap, atau git nama-perintah -h untuk daftar flag ringkas. Dokumentasi yang sama juga ada di git-scm.com.

Bisakah perintah Git yang panjang dipersingkat?

Bisa, dengan alias: git config --global alias.lg "log --oneline --graph --all" memungkinkan Anda mengetik git lg.

Apakah perintah ini sama di Windows?

Ya, perintahnya identik di semua sistem. Di Windows, jalankan di Git Bash, PowerShell, atau terminal editor kode.