Untuk menambahkan isi satu folder ke staging area Git, jalankan perintah berikut dari direktori proyek. Ganti src/ dengan folder yang ingin disertakan dalam commit:
git add -- src/
git status --short
git diff --cached --statgit add -- src/ memproses file di dalam src/, termasuk subfoldernya. Pada Git modern, perubahan yang masuk meliputi file baru, file yang diedit, dan penghapusan file yang sudah dilacak. File baru yang cocok dengan aturan ignore tidak ikut ditambahkan.
Perintah ini belum membuat commit dan belum mengunggah apa pun ke GitHub. Staging adalah tempat memilih isi commit berikutnya. Pemisah -- menandai bahwa argumen setelahnya adalah path, bukan opsi perintah.
Contoh: hanya tambahkan folder yang sedang dikerjakan
Misalnya proyek mempunyai susunan seperti ini:
proyek/
├── README.md
├── src/
│ ├── app.js
│ └── components/
│ └── button.js
└── docs/
└── catatan.mdJika ketiga file dalam src/ dan docs/ masih baru, git add -- src/ hanya menambahkan dua file di dalam src/. File docs/catatan.md tidak ikut dipilih. Namun, file dari folder lain yang sudah berada di staging sebelumnya tetap berada di sana; perintah ini tidak mengosongkan staging lalu menggantinya dengan src/.
Periksa pilihan yang akan masuk ke commit:
git diff --cached --name-status
git diff --cachedPerintah pertama merangkum nama dan jenis perubahan. Perintah kedua memperlihatkan perubahan isinya. Contoh ringkasan untuk dua file baru:
A src/app.js
A src/components/button.jsHuruf A berarti file baru masuk index. M berarti isi file berubah, sedangkan D berarti penghapusan file ikut dipilih. Cek seluruh daftar, bukan hanya folder yang baru ditambahkan, sebelum melakukan commit.
Staging menyimpan versi file saat git add dijalankan. Bila Anda mengedit file lagi setelahnya, perubahan terakhir belum otomatis masuk staging. Jalankan git add kembali jika perubahan itu memang perlu disertakan. Pada git status --short, dua kolom awal membedakan keadaan index dan working tree; MM berarti ada perubahan yang sudah dipilih sekaligus perubahan lain yang belum dipilih pada file yang sama.
Path dengan spasi dan posisi terminal
Bungkus path dengan tanda kutip jika nama folder mengandung spasi:
git add -- "dokumen proyek/"Tanda kutip menjaga nama tersebut menjadi satu argumen. Ini bukan wildcard. Untuk beberapa folder, sebutkan masing-masing path:
git add -- src/ tests/ "dokumen proyek/"Path biasa dihitung dari direktori tempat terminal berada. Jika sedang berada di proyek/src/, git add -- components/ menunjuk proyek/src/components/, bukan folder components/ di akar proyek.
Untuk memastikan root repository, gunakan:
git rev-parse --show-toplevelAnda dapat pindah ke direktori yang ditampilkan, lalu menjalankan perintah utama. Alternatif dari subfolder repository adalah pathspec berawalan :(top):
git add -- ":(top)src/"Git menafsirkan path itu dari root working tree. Contoh perintah git di halaman ini bisa dijalankan di Git Bash maupun PowerShell; tanda kutip ganda juga menjaga pathspec tersebut tetap satu argumen.
Bedanya git add folder, -A, -u, dan titik
| Perintah | Perubahan yang dipilih |
|---|---|
git add -- src/ |
File baru, modifikasi, dan penghapusan di src/ |
git add -A -- src/ |
Semua jenis perubahan, tetap dibatasi ke src/ |
git add -u -- src/ |
Modifikasi dan penghapusan file yang sudah dilacak di src/; tidak memasukkan file baru |
git add -- . |
Perubahan di direktori saat ini dan subfoldernya |
git add -A |
Perubahan di seluruh working tree, termasuk di luar direktori terminal saat ini |
Opsi -A tidak mengabaikan pathspec. git add -A -- src/ tetap terbatas pada folder itu. Yang menjangkau seluruh working tree adalah git add -A tanpa pathspec.
Gunakan folder langsung, bukan src/*, jika maksudnya seluruh isi folder. Ekspansi wildcard bisa melibatkan shell dan memberi perilaku yang berbeda, terutama untuk nama tersembunyi. Path direktori lebih jelas untuk kebutuhan ini.
Bila masih ragu, lihat pratinjau tanpa mengubah staging:
git add --dry-run -- src/--dry-run juga dapat mengembalikan error jika path tidak ditemukan. Output kosong bukan bukti tunggal bahwa folder kosong: mungkin memang tidak ada perubahan yang perlu ditambahkan.
Kenapa folder kosong tidak ikut?
Dalam pemakaian normal, Git melacak file, bukan direktori kosong. git add pada folder kosong tidak menghasilkan file baru untuk commit. Bila struktur folder perlu tersedia setelah clone, buat file penanda di dalamnya.
Contoh berikut untuk Git Bash, bash, atau zsh:
mkdir -p uploads
touch uploads/.gitkeep
git add -- uploads/.gitkeepDi PowerShell, Anda bisa membuat folder dan file kosong yang sama melalui editor atau File Explorer, lalu menjalankan baris git add tersebut.
.gitkeep hanya nama konvensi, bukan fitur khusus Git. File README.md berisi penjelasan fungsi folder juga bisa digunakan. Jika uploads/ diabaikan oleh aturan ignore, file penanda di dalamnya tetap bisa terabaikan; periksa aturan tersebut sebelum memaksakan penambahan.
Folder ada, tetapi isinya tidak masuk staging
Periksa tiga hal berikut secara berurutan.
1. Pastikan repository dan path benar
git rev-parse --show-toplevel
git status --short -- src/
git ls-files -- src/git ls-files memperlihatkan file yang tercatat dalam index. Folder yang sudah terlacak dan tidak berubah memang tidak perlu muncul dalam git status. Pesan fatal: not a git repository berarti terminal tidak berada di dalam working tree Git yang sesuai; pindah ke proyek yang benar, jangan langsung membuat repository baru untuk menghilangkan pesan itu.
Untuk error pathspec ... did not match any files, cocokkan ejaan, posisi terminal, dan path file sebenarnya. Path yang keliru tetap keliru walaupun ditambahkan --dry-run.
2. Cek aturan ignore pada file yang hilang
Gunakan path file konkret, bukan hanya nama folder:
git check-ignore -v -- src/cache/hasil.tmp
git status --short --ignored -- src/Jika file diabaikan, git check-ignore -v menunjukkan sumber aturan dan polanya. Aturan bisa berasal dari .gitignore proyek, .git/info/exclude, atau konfigurasi ignore pengguna. Exit code 1 tanpa output dari git check-ignore umumnya berarti tidak ada path yang dilaporkan sebagai ignored, bukan kegagalan koneksi atau instalasi.
Jangan langsung memakai git add -f untuk mengatasi aturan ignore. Aturan tersebut mungkin sengaja melindungi .env, token, hasil build, atau dependency. Pastikan file aman dibagikan dan kebijakan proyek memang mengizinkannya.
3. Bedakan file terlacak dan file yang baru diabaikan
Menambahkan pola ke .gitignore tidak menghentikan pelacakan file yang sudah ada dalam index. Akibatnya, perubahan pada file tersebut masih bisa masuk lewat git add.
Berhenti melacak dan membatalkan staging bukan tindakan yang sama. git rm --cached menyiapkan penghapusan file dari repository pada commit berikutnya, walaupun salinan lokal saat itu dipertahankan. Setelah commit itu dibagikan, checkout atau pembaruan rekan tim dapat menghapus salinan terlacak mereka. Jangan gunakan perintah tersebut hanya karena ingin membatalkan pilihan commit.
Membatalkan staging tanpa membuang edit
Pada repository yang sudah mempunyai commit, gunakan:
git restore --staged -- src/
git status --short
git diff --cached --stat--staged mengembalikan index untuk path tersebut ke keadaan HEAD; isi working tree tidak dipulihkan. Edit lokal tetap ada, file baru tetap berada di disk sebagai untracked, dan penghapusan lokal tetap berupa perubahan yang belum di-stage.
Jangan menghilangkan --staged atau menambahkan --worktree bila tujuan Anda mempertahankan edit. Itu mengubah bagian yang dipulihkan. Perintah ini memakai git restore, yang tersedia mulai Git 2.23.
Jika belum pernah ada commit, HEAD belum menunjuk commit sehingga cara tersebut tidak berlaku. Khusus file baru yang baru saja di-stage dan belum diedit lagi, Anda dapat mengeluarkannya dari index menggunakan git rm --cached -r -- nama-folder/; periksa hasilnya dan jangan menambahkan -f jika Git menolak. Pada repository yang sudah memiliki riwayat, jangan samakan langkah khusus commit pertama ini dengan cara unstage di atas.
Sebelum commit
Jalankan git diff --cached sekali lagi untuk memastikan tidak ada rahasia atau perubahan dari folder lain yang ikut terpilih. Setelah isinya sesuai, barulah buat commit. Pengiriman commit ke remote adalah langkah terpisah; lihat panduan git push jika Anda sudah siap mengunggahnya.
Rujukan perilaku perintah: dokumentasi git add, git restore, dan gitignore.