Jika Anda melakukan stage pada sebuah berkas dalam proyek Git di Mac tetapi ingin mengecualikannya dari commit berikutnya, jalankan git restore --staged untuk berkas tersebut dari Terminal. Ini akan memperbarui staging area Git sambil tetap mempertahankan berkas tersebut di folder kerja Anda, sehingga hasil editnya tetap tersedia untuk ditinjau atau di-stage nanti. Periksa jalur berkas dan konfirmasikan hasilnya dengan git status sebelum melakukan commit.

Apa yang diubah oleh "unstage"

Git menyimpan rencana commit berikutnya di dalam indeksnya, yang juga disebut staging area. Sebuah commit biasanya mencakup perubahan yang telah di-stage; hasil edit yang belum Anda stage tetap berada di working tree Anda. Oleh karena itu, menghapus berkas dari indeks akan mengubah apa yang disiapkan untuk commit tersebut, tanpa meminta Git untuk menulis ulang salinan kerja (working copy). Dokumentasi Git menyatakan bahwa git restore --staged memulihkan indeks dari HEAD secara default. Dokumentasi restore Git

Ini berguna ketika Anda salah melakukan stage pada suatu berkas, atau memutuskan bahwa satu berkas tidak boleh dimasukkan ke dalam commit. Perintah ini berlaku khusus untuk berkas tertentu jika Anda memberikan satu jalur (path). Jangan menambahkan --worktree: dokumentasi Git menyebutkan bahwa menggunakan --staged dan --worktree secara bersamaan akan memulihkan kedua lokasi tersebut, yang mana bukanlah tujuan Anda jika ingin mempertahankan hasil edit.

Melakukan unstage satu berkas dari Terminal

Buka Terminal di Mac Anda dan beralihlah ke folder repositori. Shell default Terminal adalah zsh, meskipun Mac yang dikelola organisasi mungkin menggunakan shell yang berbeda. Panduan Terminal Apple

Jalankan git status terlebih dahulu. Temukan berkas yang telah di-stage di bawah bagian “Changes to be committed” dan catat jalurnya yang relatif terhadap root repositori. Jika Anda melihat repositori yang berbeda atau jalurnya tidak jelas, berhenti sejenak dan periksa lokasi Anda sebelum mengubah apa pun.

Sebagai contoh, untuk melakukan unstage pada src/Feature.swift, jalankan:

git restore --staged -- src/Feature.swift

Tanda -- memisahkan opsi dari jalur berkas. Ini berguna untuk nama-nama yang mungkin dianggap sebagai opsi. Beri tanda kutip pada jalur yang mengandung spasi agar zsh meneruskan jalur tersebut sebagai satu argumen:

git restore --staged -- "Documentation/Setup Notes.md"

Gunakan jalur persis seperti yang dilaporkan oleh Git, termasuk penggunaan huruf besar/kecil dan nama direktori apa pun. Jika Anda sudah berada di dalam subdirektori repositori, penanganan jalur oleh Git bisa menjadi kurang jelas; menjalankan perintah dari root repositori dan menggunakan jalur lengkap yang relatif terhadap repositori membuat target lebih mudah diverifikasi.

Memastikan hasil edit masih ada

Jalankan git status kembali. Untuk berkas terlacak (tracked) yang dimodifikasi, perubahan yang di-stage akan hilang dari “Changes to be committed” dan muncul di bawah “Changes not staged for commit.” Itu berarti salinan kerja masih berbeda dari HEAD, tetapi indeks tidak lagi berisi perubahan yang diajukan tersebut. Git mendeskripsikan status sebagai penampil perubahan antara HEAD dan indeks, serta antara indeks dan working tree. Dokumentasi add Git

Anda dapat memeriksa hasil edit yang belum di-stage dengan:

git diff -- "src/Feature.swift"

Diff tersebut membandingkan berkas kerja dengan indeks. Karena indeks sekarang cocok dengan HEAD untuk berkas yang terlacak tersebut, perintah ini akan menampilkan hasil edit tersimpan yang Anda hapus dari staging. Untuk mempersiapkan berkas tersebut untuk commit berikutnya, lakukan stage kembali dengan git add -- "src/Feature.swift".

Apa yang diharapkan untuk berkas baru dan penghapusan

Jika berkas tersebut baru dan belum pernah di-commit, berkas tersebut tidak memiliki versi di HEAD. Setelah git restore --staged -- path/to/new-file menghapusnya dari indeks, berkas tersebut akan tetap ada di disk sebagai berkas yang tidak terlacak (untracked). Pastikan berkas tersebut muncul di bawah “Untracked files” pada git status; jangan menghapusnya jika Anda ingin menyimpannya.

Jika Anda melakukan stage pada penghapusan berkas yang terlacak, memulihkan indeks dari HEAD akan menempatkan kembali versi terlacak ke dalam indeks, sementara salinan kerja tetap terhapus. Status akan menampilkan penghapusan yang belum di-stage (unstaged deletion). Perbedaan ini penting: unstage tidak selalu membuat working tree terlihat tidak berubah; langkah ini mempertahankan status yang saat ini ada di disk.

Jika Anda hanya melakukan stage pada sebagian berkas

Perintah yang sama akan membatalkan stage (unstage) seluruh isi berkas yang telah di-stage. Jika Anda sengaja melakukan stage pada beberapa potongan perubahan (hunk) dan hanya ingin mempertahankan bagian tertentu yang di-stage, jangan jalankan perintah untuk seluruh berkas. Perintah restore Git mendukung mode patch interaktif, tetapi memilih arah dan potongan perubahan yang tepat memerlukan kehati-hatian. Pelajari perilaku git restore --patch yang terdokumentasi sebelum menggunakannya; Git juga mendokumentasikan git add --patch untuk memilih bagian perubahan yang akan di-stage secara interaktif. Dokumentasi restore Git

Hindari git restore --worktree atau git restore --staged --worktree untuk tugas ini. Opsi-opsi tersebut memengaruhi working tree dan dapat membuang hasil edit yang justru ingin Anda pertahankan. Jika hasil dalam git status berbeda dari yang Anda harapkan, jeda sejenak dan periksa jalur serta diff sebelum menjalankan perintah restore lainnya.

Sumber