Pendahuluan

Git adalah salah satu sistem kontrol versi terpopuler yang banyak digunakan oleh developer untuk mengelola kode. Dengan Git, pengguna bisa melacak perubahan pada proyek, berkolaborasi dengan tim, serta mencegah kesalahan yang bisa terjadi dalam pengembangan software. Catatan ini akan membahas langkah-langkah dasar hingga teknik lanjutan dalam menggunakan Git.

Pembahasan

Instalasi Git

Berikut adalah cara install Git di beberapa distribusi Linux:

$ sudo apt install git     # Ubuntu / Debian
$ sudo dnf install git     # Fedora
$ sudo pacman -S git       # Arch Linux

Konfigurasi Dasar

Setelah menginstall Git, lakukan konfigurasi awal untuk mengatur informasi pengguna seperti username dan email, serta beberapa konfigurasi penting lainnya.

Mengatur Username dan Email Secara Global

$ git config --global user.name "Rahmat Ardiansyah"
$ git config --global user.email "artsbymat@gmail.com"

Mengatur di Repository Tertentu

$ git config user.name "Rahmat Ardiansyah"
$ git config user.email "rahmatardiansyah147@gmail.com"
$ git commit --author="Rahmat Ardiansyah <rahmatardiansyah147@gmail.com">" # Akan menimpa pada commit berikutnya

Mengatur Default Editor

Untuk menggunakan Neovim sebagai editor saat membuat commit message:

$ git config --global core.editor "nvim"

Mengatur Default Nama Branch

$ git config --global init.defaultBranch main

Tips

Cek semua konfigurasi:

$ git config --list --show-origin

Workflow Dasar Git

Membuat Repository Baru

$ git init
$ git remote add origin git@github.com:username/repo.git

Menambahkan File dan Commit

$ git add . $ git commit -m "Initial commit"

Mendorong Perubahan ke Remote

$ git push -u origin main

Menarik Update dari Remote

$ git pull origin main

Tips

Gunakan --rebase untuk menghindari merge commit yang tidak perlu:

$ git pull --rebase origin main

Branching dan Merging

Membuat dan Pindah Branch

$ git branch feat-login
$ git checkout feat-login
$ # atau
$ git checkout -b feat-login

Menggabungkan Branch

$ git checkout main
$ git merge feat-login

Menghapus Branch

$ git branch -d feat-login
$ # paksa hapus
$ git branch -D feat-login

Mengganti Nama Branch

$ git branch -m oldname newname

Info

-m adalah perintah untuk move atau mengubah nama branch.

Git Lanjutan (Advance)

Git menyediakan banyak fitur untuk membantu developer dalam mengelola berbagai skenario proyek. Berikut adalah beberapa fitur yang bisa pengguna manfaatkan.

Git Worktree

Git Worktree adalah fitur yang memungkinkan kita bekerja di beberapa cabang sekaligus pada satu repository.

Clone Repository dengan Git Worktree

$ git clone --bare git@github.com:artsbymat/blog.git

Menambahkan Worktree

$ git worktree add feat

Checkout ke Commit Lama Menggunakan Worktree

$ git worktree add old
$ cd old
$ git checkout a2cf53b

Menghapus Worktree

$ git worktree remove feat

Untuk menghapus worktree yang belum di-commit:

$ git worktree remove feat --force

Menghapus branch:

$ git branch -D feat

Git Stash

Untuk menyimpan perubahan sementara tanpa commit:

$ git stash
$ git stash list
$ git stash apply
$ git stash drop

Git Log dan Diff

Melihat riwayat perubahan:

$ git log --oneline --graph --decorate
$ git diff                # lihat perubahan belum di-stage
$ git diff --staged       # lihat perubahan yang sudah di-stage
$ git log -p -- file.js   # lihat diff per commit di satu file

Git Clean

Menghapus file/folder yang belum dilacak (Untracked):

$ git clean -f -d

Git Restore dan Reset

Mengembalikan File

$ git restore file.txt          # ke versi terakhir di HEAD
$ git restore --staged file.txt # batalkan stage

Menghapus Commit Terakhir

$ git reset HEAD~1              # soft reset, simpan perubahan di working dir
$ git reset --hard HEAD~1       # hard re[[#pembahasan|Pembahasan]]set, hapus perubahan

Contoh Kasus pada Git

1. Commit di Branch yang Salah

Jika kita terlanjur melakukan commit di branch yang salah, berikut cara mengatasinya:

$ git reset HEAD~1

2. Git Pull dengan Rebase

Jika ada commit baru di repository GitHub, namun kita sudah memiliki 2 commit terbaru di repository lokal, gunakan --rebase untuk menggabungkan commit dari GitHub ke local tanpa merge conflict:

$ git pull --rebase origin main

Info

  • Kotak merah: commit baru dari GitHub.
  • Kotak hijau: commit baru dari repository lokal.

3. Mengganti URL Git Remote Repository

Jika kita ingin mengganti URL repository remote:

$ git remote -v # Melihat remote yang tersedia
$ git remote set-url origin new.git.url/here # (Format)
$ git remote set-url origin git@github.com:rahmatardiansyah/brain-hub.git # Contoh

4. Melihat text yang berubah pada file tertentu tapi tidak tau commit yang mana

$ git log -p -- file.js

Dengan command diatas akan menampilkan semua diff commit pada file ‘file.js’ (seperti menggunakan less).

5. Menghapus folder dari git repository

Untuk menghapus folder dari git repository tanpa menghapus folder tersebut dari working directory (filesystem lokal), bisa menggunakan perintah git rm --cached. Ini akan menghapus folder dari tracking Git, tapi tidak menghapus file/folder secara fisik dari komputer.

Langkah-langkah:

Misalnya kita ingin menghapus folder bernama contoh-folder dari Git:

git rm -r --cached contoh-folder

Penjelasan:

  • -r: menghapus secara rekursif (untuk folder).
  • --cached: hanya menghapus dari index Git (bukan dari disk lokal).

Setelah itu:

  1. Tambahkan folder tersebut ke .gitignore agar tidak dilacak lagi setetelahnya:
  2. Commit perubahan: git commit -m "Remove folder from Git tracking"

6. Abaikan file atau folder tapi tidak di gitignore

Agar Git mengabaikan perubahan lokal1:

$ git update-index --assume-unchanged <file>

Atau tambahkan ke .git/info/exclude untuk mengabaikan perubahan lokal pada file tertentu tanpa mengubah .gitignore global.

$ echo "public/search.json" >> .git/info/exclude

Tips Lainnya

Untuk manajemen Git yang lebih efisien, kita bisa menggunakan tools seperti Lazygit untuk antarmuka yang lebih intuitif.

Gunakan teknik Git Cherry Pick untuk mengambil commit tertentu di branch lain.

Footnotes

  1. https://practicalgit.com/blog/make-git-ignore-local-changes-to-tracked-files.html https://stackoverflow.com/a/1753078