Batalkan "git add <dir>"?

186

Saya keliru menambahkan file menggunakan perintah "git add dir". Saya belum menjalankan "git commit". Apakah ada cara untuk menghapus dir ini dan semua yang ada di dalamnya dari komit?

Saya sudah mencoba git reset dir, tetapi tidak berhasil. Rupanya git reset filecara untuk membatalkannya. Tapi saya punya banyak file dan waktu yang sangat sedikit.

neoneye
sumber
6
git reset <path>memperbarui indeks untuk jalur itu sehingga cocok HEAD(komit saat ini). Itu tidak menyentuh pohon yang berfungsi.
Cascabel

Jawaban:

279

Untuk menghapus direktori dan semua yang ada di dalamnya dari indeks,

git rm --cached -r dir

The --cachedmerek beralih git rmberoperasi pada indeks saja dan tidak menyentuh copy pekerjaan. The -rberalih membuatnya rekursif.

Aristoteles Pagaltzis
sumber
12
"Untuk menghapus seluruh direktori yang dipentaskan dari indeks" akan menjadi penjelasan yang sedikit lebih baik dari perintah git, karena bagi pemula git seperti saya, perintahnya sangat mirip jika itu bahkan bisa menghapus direktori pada sistem file. Hanya masalah selera.
Sascha Gottfried
1
Itu sebabnya saya berani menekan --cachedtombol. Meskipun demikian, saya telah mengedit jawaban untuk memenuhi syarat bahwa itu hanya berlaku untuk indeks.
Aristoteles Pagaltzis
@ SaschaGottfried terima kasih atas klarifikasi, saya takut pada awalnya bahkan dengan edit tetapi komentar Anda membuatnya jelas :)
Max von Hippel
saya hampir menghapus seluruh folder saya: S setelah ini ... melakukan git reset HEAD folderperbaikan semua ... tapi sebelum melakukan ini, lakukan git status folder, dan pastikan ia mengatakan 'menghapus' semua file pada folder itu
Bengalaa
21

Anda akan ingin menggunakan git rm --cached -r <dir>. perintah ini akan menghapus isi direktori yang dipentaskan dari indeks.

jika direktori sudah dilacak Anda harus menemukan file baru dan lama secara manual dan menghapus stage mereka ...

Mungkin dijalankan git reset <dir>setelah itu untuk mereset file yang ada (dan sudah dilacak) di dalam direktori.


Pembaruan 2019:

Cukup jalankan git reset directory, itu akan menghapus stage semua file yang baru ditambahkan.

rajutan
sumber
tidak git reset <dir>cukup sendiri?
Bananach
@Bananach Saya baru saja mencoba dan sepertinya, ya, git reset <dir>akan berhasil juga. Jawabannya dari 2011, jadi saya tidak yakin apakah itu sudah bekerja 8 tahun yang lalu. Saya akan memperbarui jawabannya. Terima kasih atas petunjuknya!
Knittl
11

Gunakan finddan xargs:

find dir -type f | xargs git reset
moinudin
sumber
11

Direktori unstage

$ git reset <dir>

Hapus semua file dan folder yang saya tampilkan dengan:

$ git add <dir>

Konfirmasikan direktori tidak stage

Untuk mengonfirmasi penghapusan direktori dan isinya dari pementasan (yaitu "Perubahan yang harus dilakukan"), jalankan di bawah ini:

$ git status

atau

$ git diff --staged --name-only 

untuk mengkonfirmasi bahwa tidak ada folder atau file yang dipentaskan sebelumnya masih dipentaskan.

mrduncle1
sumber
2

Satu perintah sederhana untuk menghapus file / folder yang dipentaskan, yang belum berkomitmen adalah - git restore --staged <dir>.

masukkan deskripsi gambar di sini

Tofan Jena
sumber