panduan praktis
GitHub via Terminal
Ubuntu 24.04
Ubuntu 24.04
Panduan lengkap menginstal, mengkonfigurasi, dan menggunakan Git & GitHub
dari terminal Bash di Ubuntu 24.04 LTS — termasuk tips spesifik Linux.
Ubuntu 24.04 LTS
Bash / Zsh
Git 2.43+
SSH / HTTPS
Panduan ini ditulis untuk Ubuntu 24.04 LTS. Ikuti dari nomor 01 untuk
setup fresh, atau loncat ke topik yang dibutuhkan.
Ubuntu vs Windows: Git di Ubuntu lebih terintegrasi dengan
sistem. SSH agent bisa otomatis via systemd, credential store pakai libsecret,
dan path pakai forward-slash
/ (bukan \).
Tidak perlu instalasi tool tambahan seperti ssh-agent manual di
PowerShell.
01 / INSTALL
Instalasi Git
Install via apt, cek versi, update ke versi terbaru dari PPA.
02 / AUTH
Login & Koneksi
SSH key dengan ssh-agent, GitHub CLI (gh), dan credential libsecret.
03 / INIT
Local Git Repository
Init repo, 3 area git, dan konfigurasi dasar.
04 / REMOTE
Repo di GitHub
Buat repo baru dan hubungkan ke lokal.
05 / TARIK
Clone & Pull
Clone, fetch, pull — perbedaan dan kapan menggunakannya.
06 / SYNC
Commit, Push & Lainnya
Workflow harian: add, commit, push, rm, reset, revert.
07 / IGNORE
.gitignore
Template umum dan spesifik termasuk pattern Linux/Ubuntu.
08 / BRANCH
Branching & Workflow
Branch, merge, stash, tag, dan penyelamatan darurat.
09 / UBUNTU
Ubuntu-Specific Tips
Bash alias, git prompt, xclip, multiple accounts, dan lainnya.
10 / REF
Cheat Sheet
Semua perintah penting dalam satu halaman referensi cepat.
01
Instalasi Git di Ubuntu 24.04
Git biasanya sudah tersedia di Ubuntu, tapi versinya mungkin belum
terbaru
Cek Apakah Git Sudah Ada
BASH
git --version # Jika ada output seperti ini, git sudah terinstall: git version 2.43.0 # Jika command not found, lanjut ke instalasi di bawah
Instalasi via apt (Standar)
Install git dari repository Ubuntu resmi
sudo apt update sudo apt install -y git # Verifikasi instalasi git --version
Instalasi Versi Terbaru via PPA (Opsional)
Ubuntu 24.04 biasanya sudah cukup baru. Gunakan PPA ini hanya jika perlu
fitur Git terbaru yang belum ada di versi apt bawaan.
git-core PPA — versi paling mutakhir
sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt install -y git # Verifikasi versi terbaru git --version
Install GitHub CLI (gh) — Opsional tapi Berguna
GitHub CLI (gh) memungkinkan kamu membuat repo, PR, issue
langsung dari terminal tanpa buka browser. Sangat berguna untuk workflow.
Install GitHub CLI resmi
# Tambah repository GitHub CLI sudo mkdir -p /etc/apt/keyrings curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/etc/apt/keyrings/githubcli-archive-keyring.gpg sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list sudo apt update sudo apt install -y gh # Verifikasi gh --version
02
Login & Koneksi ke GitHub
Konfigurasi identitas, SSH key, dan GitHub CLI
A. Konfigurasi Identitas Git (Wajib)
Set nama dan email — muncul di setiap commit WAJIB PERTAMA
# Ganti dengan nama dan email akun GitHub git config --global user.name "Nama Kamu" git config --global user.email "email@kamu.com" # Set default branch ke 'main' git config --global init.defaultBranch main # Set editor default (pilih salah satu) git config --global core.editor nano # nano (mudah) git config --global core.editor vim # vim git config --global core.editor "code --wait" # VS Code # Verifikasi semua konfigurasi git config --list # Lokasi file config ~/.gitconfig
B. Metode SSH (Rekomendasi)
1
Generate SSH Key
Tekan Enter untuk semua prompt (pakai lokasi default). Isi
passphrase atau kosongkan.
BASH
ssh-keygen -t ed25519 -C "email@kamu.com" # Key tersimpan di: ~/.ssh/id_ed25519 ← private key (JANGAN dishare) ~/.ssh/id_ed25519.pub ← public key (yang dikirim ke GitHub) # Verifikasi file ada ls -la ~/.ssh/
2
Setup ssh-agent (otomatis saat login)
BASH
# Cara 1: Manual (harus dijalankan setiap sesi baru) eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 # Cara 2: Otomatis via ~/.bashrc (rekomendasi) cat >> ~/.bashrc << 'EOF' # Auto start ssh-agent if [ -z "$SSH_AUTH_SOCK" ]; then eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 2>/dev/null fi EOF source ~/.bashrc # Cara 3: Gunakan ~/.ssh/config (lebih bersih) cat >> ~/.ssh/config << 'EOF' Host github.com AddKeysToAgent yes IdentityFile ~/.ssh/id_ed25519 EOF
3
Salin Public Key ke GitHub
BASH
# Tampilkan public key cat ~/.ssh/id_ed25519.pub # Copy ke clipboard (butuh xclip — install dulu jika belum ada) sudo apt install -y xclip cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard # Atau jika pakai xdotool/xsel: cat ~/.ssh/id_ed25519.pub | xsel --clipboard --input # Di GUI Terminal GNOME: Ctrl+Shift+C sudah cukup setelah select text
GitHub → Settings → SSH and GPG keys → New SSH key → Paste → Add SSH key.
4
Test koneksi SSH
BASH
ssh -T git@github.com # Jika muncul peringatan host baru, ketik 'yes' The authenticity of host 'github.com' can't be established. Are you sure you want to continue connecting? yes Hi username! You've successfully authenticated, but GitHub does not provide shell access. # Jika gagal, debug dengan: ssh -vT git@github.com
C. Login via GitHub CLI (gh auth login)
Login interaktif — cara termudah GH CLI
# Login interaktif (akan muncul menu) gh auth login # Pilih: GitHub.com → SSH → Upload SSH key → Login with browser # Atau: GitHub.com → HTTPS → Paste token # Cek status login gh auth status # Logout gh auth logout
D. HTTPS + Credential Store (libsecret)
Simpan credential HTTPS di keyring sistem LINUX
# Install libsecret (untuk menyimpan token di GNOME Keyring) sudo apt install -y libsecret-1-0 libsecret-1-dev # Compile git credential helper sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret # Aktifkan git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret # Atau pakai gnome-keyring (alternatif lebih mudah) sudo apt install -y gnome-keyring git config --global credential.helper store # ← Credential tersimpan di ~/.git-credentials (plain text, kurang aman) # Lebih aman — cache sementara (timeout 3600 detik) git config --global credential.helper "cache --timeout=3600"
03
Local Git Repository
Inisialisasi Git di folder lokal — dari folder baru atau yang sudah
ada
1
Navigasi ke folder project
BASH
# Masuk ke folder yang sudah ada cd ~/projects/nama-project # Atau buat folder baru sekaligus masuk mkdir -p ~/projects/nama-project cd ~/projects/nama-project # Lihat isi folder ls -la
2
Inisialisasi Git
BASH
git init Initialized empty Git repository in /home/user/projects/nama-project/.git/ # Cek status git status # Lihat folder .git yang dibuat ls -la .git/
3
Commit pertama
BASH
# Buat README echo "# Nama Project" > README.md git add README.md git commit -m "initial commit" # Pastikan branch bernama 'main' git branch -M main
Permission File di Linux — Penting!
Linux Caveat: Git melacak executable bit file di Linux. Jangan
jalankan
chmod -R 777 di dalam repo — permission file akan masuk
ke commit dan bisa menyebabkan masalah keamanan di server.
Kelola executable bit dengan benar
# Cek apakah Git melacak permission changes git config core.fileMode # Nonaktifkan tracking permission (jika perlu, misal collaboration antar OS) git config core.fileMode false # Buat file menjadi executable dan track perubahan ini chmod +x script.sh git add script.sh git commit -m "chore: make script.sh executable"
04
Membuat Repo di GitHub
Via web GitHub atau langsung dari terminal dengan GitHub CLI
A. Via GitHub CLI (Cara Cepat dari Terminal)
Buat repo tanpa buka browser GH CLI
# Buat repo publik baru gh repo create nama-repo --public # Buat repo privat gh repo create nama-repo --private # Buat repo dari folder lokal yang sudah ada + langsung push gh repo create nama-repo --public --source=. --push # Buat repo dengan deskripsi gh repo create nama-repo --public --description "Deskripsi project" # Lihat repo yang ada gh repo list
B. Via Web + Hubungkan ke Lokal
Remote add & first push BASH
# Tambahkan remote origin (SSH) git remote add origin git@github.com:username/nama-repo.git # Verifikasi git remote -v # Push pertama + set upstream git push -u origin main # Setelah upstream di-set, cukup: git push
Manajemen Remote
git remote -v
Lihat semua remote terdaftar
git remote add upstream <url>
Tambah remote kedua (misal original fork)
git remote set-url origin <url-baru>
Ganti URL remote (misal HTTPS ke SSH)
git remote rename origin baru
Ganti nama remote
git remote remove origin
Hapus remote (repo lokal tetap aman)
git remote prune origin
Hapus referensi branch remote yang sudah dihapus
05
Clone & Pull dari GitHub
Ambil repo dari GitHub ke lokal — clone, fetch, pull
Clone
Download repo dari GitHub BASH
# Clone via SSH (rekomendasi) git clone git@github.com:username/nama-repo.git # Clone via HTTPS git clone https://github.com/username/nama-repo.git # Clone ke nama folder custom git clone git@github.com:username/nama-repo.git nama-folder # Clone branch tertentu saja git clone -b develop git@github.com:username/nama-repo.git # Shallow clone (history 1 commit saja, lebih cepat) git clone --depth=1 git@github.com:username/nama-repo.git # Clone via gh CLI gh repo clone username/nama-repo
Fetch vs Pull
git fetch AMAN
# Download tanpa merge # File lokal tidak berubah git fetch origin # Review dulu sebelum merge git log HEAD..origin/main --oneline git diff HEAD..origin/main # Baru merge jika sudah yakin git merge origin/main
git pull MERGE AUTO
# Fetch + merge sekaligus git pull # Pull dengan rebase (lebih bersih) git pull --rebase # Pull dari branch tertentu git pull origin main # Set default ke rebase git config --global pull.rebase true
06
Commit, Push & Perintah Penting
Workflow harian dan manajemen perubahan
Workflow Harian Standar
Urutan kerja yang benar WORKFLOW
# 1. Cek status git status # 2. Lihat perubahan detail git diff # unstaged git diff --staged # sudah di-add # 3. Stage perubahan git add nama-file.py # file tertentu git add . # semua perubahan git add src/ # seluruh folder git add -p # interaktif per hunk # 4. Commit git commit -m "feat: tambah endpoint /api/users" git commit -am "fix: perbaiki validasi input" # add+commit (tracked files) # 5. Push git push # ke upstream yang sudah di-set git push origin main # eksplisit
Perintah git rm
git rm file.txt
Hapus file dari repo DAN disk
git rm --cached file.txt
Hapus dari tracking Git saja — file tetap di disk. Gunakan untuk file
yang harusnya di .gitignore
git rm -r --cached folder/
Hapus folder dari tracking secara rekursif
Contoh: hapus __pycache__ dari tracking COMMON
git rm -r --cached __pycache__/ git rm -r --cached *.pyc # Pastikan sudah ada di .gitignore git add .gitignore git commit -m "chore: remove pycache from tracking" git push
Undo & Perbaikan
git restore <file>
Batalkan perubahan di working dir
git restore --staged <file>
Unstage file (perubahan tetap ada)
git commit --amend -m "pesan baru"
Edit pesan commit terakhir (sebelum push)
git revert <hash>
Balik perubahan via commit baru — aman untuk kolaborasi
git reset --soft HEAD~1
Batalkan commit terakhir — perubahan masuk staging
git reset --hard HEAD~1
BERBAHAYA: hapus commit terakhir dan buang perubahan
Melihat History
Perintah log yang berguna
# Log ringkas dengan visualisasi graph git log --oneline --graph --all # Log dengan statistik file yang berubah git log --stat # Log hanya dari author tertentu git log --author="Nama" # Log file tertentu git log -p src/main.py # Log dalam range tanggal git log --after="2024-01-01" --before="2024-12-31" # Pretty format custom git log --pretty=format:"%h %an %ar - %s"
07
.gitignore
Template untuk berbagai jenis proyek — termasuk pattern spesifik Linux
Sintaks .gitignore
Pola-pola dasar
# Komentar secrets.txt # ignore di mana pun /secrets.txt # ignore HANYA di root build/ # ignore seluruh folder *.log # semua file .log **/*.log # .log di semua subfolder !important.log # PENGECUALIAN
Linux/Ubuntu
Python/FastAPI
Node.js
React+Vite
Electron
WordPress
# Linux OS files *~ .fuse_hidden* .directory .Trash-* .nfs* # Thumbnail cache .thumbnails/ .cache/ # KDE .kde/ .kde4/ # GNOME .gnome/ # macOS (jika kolaborasi) .DS_Store .AppleDouble # Editor .vscode/ .idea/ *.swp *.swo *~ \#*# .#* # Environment — JANGAN PERNAH commit! .env .env.local .env.*.local *.env # Logs *.log logs/ /tmp/
# Virtual environments venv/ .venv/ env/ .env/ ENV/ .python-version # Python cache __pycache__/ *.py[cod] *$py.class *.pyc *.pyo .Python # Build & dist dist/ build/ *.egg-info/ .eggs/ *.egg # Testing & coverage .pytest_cache/ .coverage .coverage.* htmlcov/ .tox/ nosetests.xml coverage.xml # Type checking .mypy_cache/ .dmypy.json .pytype/ # Jupyter .ipynb_checkpoints/ *.ipynb_checkpoints # FastAPI / SQLite *.db *.sqlite *.sqlite3 # Celery celerybeat-schedule celerybeat.pid # Environment .env *.env .secrets # Uvicorn / Gunicorn *.pid
# Dependencies node_modules/ .pnp .pnp.js # Build output dist/ build/ out/ .next/ .nuxt/ # Cache .npm .eslintcache .node_repl_history *.tsbuildinfo # Environment .env .env.local .env.development.local .env.test.local .env.production.local # Coverage coverage/ .nyc_output/
# Dependencies node_modules/ # Build dist/ build/ # Vite .vite/ # Environment .env .env.local .env.*.local # Editor .vscode/ .idea/ *.swp *.swo
# Dependencies node_modules/ # Build dist/ out/ release/ # Environment .env .env.local
# Core WordPress (download dari wp.org, jangan di-commit) /wp-admin/ /wp-includes/ /wp-content/uploads/ /wp-content/upgrade/ # Config wp-config.php wp-config-sample.php # Plugins (install via Composer atau manual) /wp-content/plugins/ # Themes (kecuali custom theme sendiri) /wp-content/themes/twenty*/ # Environment .htaccess /.env
Gunakan git rm --cached untuk file yang terlanjur ter-commit
tapi harusnya di-ignore. Jangan lupa commit setelahnya.
08
Branching & Workflow
Branch, merge, stash, tag, dan penyelamatan darurat
Branch Dasar
Membuat dan berpindah branch BASH
# Lihat daftar branch git branch # Buat branch baru git branch feature/login # Pindah ke branch lain git checkout feature/login # Buat + pindah sekaligus (cara modern) git switch -c feature/login # Kembali ke branch sebelumnya git switch - # Hapus branch lokal git branch -d feature/login
Merge
Menggabungkan branch BASH
# Pastikan di branch tujuan (misal main) git switch main # Merge branch fitur ke main git merge feature/login # Jika terjadi conflict: # 1. Edit file yang conflict # 2. git add file-yang-selesai # 3. git commit (tanpa -m, Git akan buat merge commit) # Abort merge jika conflict terlalu rumit git merge --abort
Stash — Simpan Perubahan Sementara
Menyimpan perubahan tanpa commit BASH
# Simpan perubahan sementara git stash # Simpan dengan pesan git stash push -m "WIP: fitur login" # Lihat daftar stash git stash list # Ambil kembali stash terakhir (dan hapus dari daftar) git stash pop # Ambil stash tertentu tanpa menghapus git stash apply stash@{2} # Hapus stash tertentu git stash drop stash@{1} # Hapus semua stash git stash clear
Tag — Menandai Versi
Buat dan push tag BASH
# Buat tag ringan (lightweight) git tag v1.0.0 # Buat tag dengan pesan (annotated — disarankan) git tag -a v1.0.0 -m "Rilis pertama" # Lihat daftar tag git tag # Push tag ke GitHub git push origin v1.0.0 # Push semua tag sekaligus git push --tags # Hapus tag lokal git tag -d v1.0.0 # Hapus tag di remote git push origin --delete v1.0.0
Workflow Rekomendasi
1
Pull latest main
Mulai dari branch main yang up-to-date.
BASH
git switch main git pull
2
Buat branch fitur
BASH
git switch -c feat/fitur-baru
3
Commit & push teratur
BASH
git add . git commit -m "feat: ..." git push -u origin feat/fitur-baru
4
Buat PR di GitHub
Buka GitHub → New Pull Request → pilih base:main ←
compare:feat/fitur-baru. Minta review, merge setelah approved.
09
Ubuntu-Specific Tips
Bash alias, git prompt, xclip, multiple accounts, dan lainnya
Bash Aliases untuk Git
Tambahkan ke ~/.bashrc atau ~/.zshrc UBUNTU
# Git shortcuts alias gs='git status' alias ga='git add' alias gc='git commit -m' alias gp='git push' alias gpl='git pull' alias gb='git branch' alias gl='git log --oneline --graph --all' alias gd='git diff' alias gco='git checkout' alias gsw='git switch' alias gst='git stash'
Git Prompt di Terminal
Tampilkan branch Git di prompt UBUNTU
# Aktifkan git-prompt bawaan (sudah ada di Ubuntu) cat >> ~/.bashrc << 'EOF' # Git prompt if [ -f /usr/lib/git-core/git-sh-prompt ]; then source /usr/lib/git-core/git-sh-prompt export GIT_PS1_SHOWDIRTYSTATE=1 export GIT_PS1_SHOWUNTRACKEDFILES=1 export GIT_PS1_SHOWUPSTREAM="auto" PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1 " (%s)")\$ ' fi EOF source ~/.bashrc
xclip — Copy dari Terminal ke Clipboard
Install dan gunakan xclip UBUNTU
sudo apt install -y xclip # Contoh: copy public key ke clipboard cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard # Alias untuk memudahkan alias clip='xclip -selection clipboard'
Multiple SSH Keys untuk Multiple Akun
Beberapa akun GitHub di satu mesin UBUNTU
# Generate key kedua ssh-keygen -t ed25519 -C "email-kerja@kamu.com" -f ~/.ssh/id_ed25519_kerja # Konfigurasi di ~/.ssh/config cat >> ~/.ssh/config << 'EOF' # Akun personal (default) Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 # Akun kerja Host github-kerja HostName github.com IdentityFile ~/.ssh/id_ed25519_kerja EOF # Clone dengan host alias git clone git@github-kerja:perusahaan/repo.git # Set user per repo (override global) git config user.email "email-kerja@perusahaan.com"
10
Cheat Sheet Lengkap
Semua perintah penting dalam satu halaman referensi cepat
Setup & Konfigurasi
git config --global user.name "Nama"
Set nama global
git config --global user.email "email@kamu.com"
Set email global
git config --global init.defaultBranch main
Default branch ke main
git config --global core.editor nano
Set editor default
git config --list
Lihat semua konfigurasi
Mulai Repo
git init
Inisialisasi repo baru
git clone <url>
Clone repo dari remote
git clone -b <branch> <url>
Clone branch spesifik
git clone --depth=1 <url>
Shallow clone (cepat)
git remote add origin <url>
Tambah remote origin
Perubahan Harian
git status
Cek status perubahan
git diff
Lihat perubahan (unstaged)
git diff --staged
Lihat perubahan (staged)
git add <file>
Stage file tertentu
git add .
Stage semua perubahan
git add -p
Stage interaktif per hunk
git commit -m "pesan"
Commit perubahan
git commit -am "pesan"
Add + commit (tracked)
git push
Push ke remote
git push -u origin main
Push + set upstream
git pull
Fetch + merge
git pull --rebase
Fetch + rebase (bersih)
Branch & Merge
git branch
Lihat daftar branch
git branch <nama>
Buat branch baru
git switch -c <nama>
Buat + pindah branch
git switch <nama>
Pindah branch
git merge <branch>
Merge branch ke current
git branch -d <nama>
Hapus branch lokal
git stash
Simpan perubahan sementara
git stash pop
Ambil stash terakhir
Undo & Perbaikan
git restore <file>
Batalkan perubahan (unstaged)
git restore --staged <file>
Unstage file
git commit --amend -m "msg"
Edit commit message
git revert <hash>
Balikkan commit (aman)
git reset --soft HEAD~1
Uncommit, keep changes
git reset --hard HEAD~1
BERBAHAYA: buang commit
git rm --cached <file>
Hapus dari tracking saja
Log & History
git log --oneline --graph --all
Log ringkas dengan graph
git log --author="Nama"
Filter by author
git log -p <file>
History file dengan diff
git show <hash>
Detail satu commit
git diff HEAD~1 HEAD
Lihat perubahan commit terakhir
Remote & Sync
git remote -v
Daftar remote
git fetch origin
Fetch perubahan remote
git push --force-with-lease
Force push yang lebih aman
git push origin --delete <branch>
Hapus branch remote
Tag
git tag -a v1.0 -m "msg"
Buat annotated tag
git push origin v1.0
Push tag ke remote
git tag -d v1.0
Hapus tag lokal