Perintah git add memindahkan perubahan dari working directory ke staging area, dan pada praktiknya menjadi alat penyusunan isi commit. Topik ini membahas bentuk-bentuk pemanggilannya, cara menstaging sebagian isi berkas secara interaktif dengan opsi -p, dan cara menstaging penghapusan berkas. Penguasaan staging membuat setiap commit berisi satu gagasan yang utuh.
Bentuk pemanggilan git add#
Bentuk paling sering dipakai adalah menstaging berkas satu per satu atau beberapa berkas sekaligus. Siapkan folder latihan dengan dua berkas, stage keduanya secara eksplisit, lalu jadikan commit dasar untuk latihan berikutnya.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-add
mkdir /tmp/lab-add
cd /tmp/lab-add
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "Pengeluaran pagi.\nPengeluaran siang.\nPengeluaran malam.\n" > kas.txt
printf "Diskusi tim.\n" > rapat.md
git add kas.txt rapat.md
git status -s
git commit -m "Catatan harian"Initialized empty Git repository in /tmp/lab-add/.git/
A kas.txt
A rapat.md
[main (root-commit) c47afaa] Catatan harian
2 files changed, 4 insertions(+)
create mode 100644 kas.txt
create mode 100644 rapat.mdMenyebut nama berkas secara eksplisit adalah bentuk yang paling terkendali karena cakupannya tidak pernah melampaui maksud penulisan. Untuk pekerjaan yang memang menyentuh banyak berkas, opsi -A menstaging seluruh perubahan pada tree proyek, termasuk berkas baru, berkas yang berubah, dan berkas yang dihapus. Tanpa argumen, git add . menstaging seluruh perubahan pada direktori saat ini dan subfoldernya. Makin luas cakupan yang dipilih, makin penting git status dipanggil terlebih dahulu untuk memastikan tidak ada perubahan yang ikut terbawa tanpa sengaja.
Menstaging sebagian isi berkas#
Staging tidak harus berupa berkas utuh. Opsi -p (patch) membagi perubahan menjadi hunks, yaitu blok perubahan yang berdekatan, lalu bertanya satu per satu apakah setiap hunk ikut di-stage. Ubah baris pertama dan baris ketiga berkas kas.txt, sehingga muncul dua hunk yang terpisah.
printf "Pengeluaran pagi: 15000.\nPengeluaran siang.\nPengeluaran malam: 20000.\n" > kas.txt
printf 'n\ny\n' | git add -p
git status -sdiff --git a/kas.txt b/kas.txt
index 39fa2fc..748718c 100644
--- a/kas.txt
+++ b/kas.txt
@@ -1,3 +1,3 @@
-Pengeluaran pagi.
+Pengeluaran pagi: 15000.
Pengeluaran siang.
-Pengeluaran malam.
+Pengeluaran malam: 20000.
(1/1) Stage this hunk [y,n,q,a,d,s,e,p,?]?
M kas.txtJawaban n melewatkan hunk pertama, sedangkan jawaban y menstaging hunk kedua, sehingga status berubah menjadi MM: huruf pertama pada kolom staging menyatakan ada perubahan yang menunggu commit, sedangkan huruf kedua pada kolom working directory menyatakan masih ada perubahan yang belum di-stage. Commit pada keadaan ini hanya menyimpan hunk yang di-stage.
git commit -m "Catat nilai pengeluaran malam"
git status -sOn branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: kas.txt
no changes added to commit (use "git add" and/or "git commit -a")
M kas.txtSatu berkas kini menjadi dua commit yang masing-masing berisi satu perubahan. Selain y dan n, jawaban q menghentikan sesi, dan s memecah hunk yang menyatukan dua perubahan menjadi bagian yang lebih kecil bila ada baris kosong di antaranya.
Menstaging penghapusan berkas#
Menghapus berkas dengan rm adalah perubahan pada working directory, dan penghapusan itu harus di-stage agar masuk commit.
rm rapat.md
git status -s
git add -A
git status -s M kas.txt
D rapat.md
M kas.txt
D rapat.mdStatus D dengan spasi di depan menyatakan penghapusan yang baru terjadi di working directory, sedangkan D setelah git add -A menyatakan penghapusan yang sudah menunggu di staging area. Commit berikutnya akan mencatat hilangnya rapat.md sebagai bagian riwayat. Alternatif satu langkahnya adalah git rm rapat.md, yang menghapus berkas sekaligus men-stage penghapusannya.
Memilih bentuk pemanggilan yang sesuai#
Ketiga bentuk pemanggilan melayani kebutuhan yang berbeda, dan memilihnya secara sadar adalah bagian dari disiplin commit. Tabel berikut merangkum konsekuensi masing-masing.
| Bentuk | Cakupan | Cocok untuk |
|---|---|---|
git add berkas | hanya berkas yang disebut | pekerjaan terfokus dan kebiasaan paling aman |
git add . | direktori saat ini dan subfoldernya | menambah sekelompok berkas baru pada satu folder |
git add -A | seluruh tree proyek | pekerjaan besar yang memang menyeberangi banyak folder |
Bentuk yang luas bukanlah bentuk yang terlarang, tetapi bentuk yang luas memindahkan tanggung jawab penyaringan dari penulis ke pembaca commit. Kombinasi yang lazim pada pekerjaan nyata adalah git status -s sebagai pemeriksaan awal, staging eksplisit untuk isi commit, dan git diff --staged sebagai peninjauan terakhir sebelum git commit. Rangkaian tiga langkah ini memakan waktu beberapa detik, sedangkan commit yang tidak sengaja memuat berkas sementara atau kredensial memerlukan penulisan ulang riwayat untuk dibersihkan.
Perlu diingat pula bahwa staging adalah keadaan, bukan penyimpanan. Isi staging area hilang bersama commit-nya, dan perubahan yang hanya ada di working directory tetap rentan hilang sampai commit dibuat. Staging yang baik menata batas antargagasan, sedangkan keamanan data tetap datang dari frekuensi commit.
Ringkasan#
git add berkasmen-stagesecara eksplisit,-Amen-stageseluruh perubahan termasuk penghapusan, dangit add .men-stageperubahan pada direktori saat ini.- Opsi
-pmen-stageper hunk sehingga satu berkas dapat dipecah ke beberapa commit. - Status dua kolom seperti
MMmembedakan perubahan yang sudah dan belum di-stagepada berkas yang sama. - Penghapusan berkas juga merupakan perubahan yang harus di-
stage, baik melaluigit add -Amaupungit rm.
Referensi#
- git-add — Git Documentation
— rujukan resmi bentuk pemanggilan
git addbeserta mode interaktif-p. - Recording Changes to the Repository — Pro Git — bagian Staging dan Removing Files pada Pro Git.