panduan praktis
GitHub via Terminal
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
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
bash
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
bash
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
bash
# 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
bash
# 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 → SettingsSSH and GPG keysNew 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
bash
# 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
bash
# 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
bash
# 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
bash
# 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
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
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
bash
# 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
bash
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
bash
# 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
gitignore / Linux + Ubuntu umum
# 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/
gitignore / Python + FastAPI + venv
# 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
gitignore / Node.js
# 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/
gitignore / React + Vite
# Dependencies
node_modules/

# Build
dist/
build/

# Vite
.vite/

# Environment
.env
.env.local
.env.*.local

# Editor
.vscode/
.idea/
*.swp
*.swo
gitignore / Electron
# Dependencies
node_modules/

# Build
dist/
out/
release/

# Environment
.env
.env.local
gitignore / WordPress
# 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
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
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
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
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
bash
# 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
bash
# 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
bash
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
bash
# 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