“Git add <dir>” geri alınsın mı?


186

Yanlışlıkla "git add dir" komutunu kullanarak dosya ekledim. Henüz "git commit" i çalıştırmadım. Bu dizini ve içerdiği her şeyi taahhütten çıkarmanın bir yolu var mı?

Denedim git reset dirama işe yaramadı. Görünüşe göre git reset fileonu geri almanın yolu. Ama çok fazla dosyam ve çok az zamanım var.


6
git reset <path>söz konusu yolun dizinini HEAD(geçerli taahhüt) eşleşecek şekilde günceller . Çalışma ağacına dokunmuyor.
Cascabel

Yanıtlar:


279

Bir dizini ve içindeki her şeyi dizinden kaldırmak için,

git rm --cached -r dir

--cachedAnahtar markaları git rmdeğil, yalnızca çalışma kopyası dokunmak endeksi çalışırlar. -rAnahtar o özyinelemeli yapar.


12
Benim gibi git yeni başlayanlar için komut, dosya sistemindeki dizini silebiliyormuş gibi görüneceğinden, "aşamalı dizinin tamamını dizinden kaldırmak" git komutunun biraz daha iyi bir açıklaması olacaktır. Sadece zevk meselesi.
Sascha Gottfried

1
Bu yüzden --cachedanahtarı cesaretlendirmiştim . Bununla birlikte, cevabı yalnızca dizin için geçerli olduğunu kabul etmek üzere düzenledim.
Aristoteles Pagaltzis

@SaschaGottfried açıklama için teşekkürler, ilk başta düzenleme ile korktum ama yorumunuz açıkça ortaya koydu :)
Max von Hippel

Neredeyse tüm klasörümü sildim: Bundan sonra S ... git reset HEAD foldersabit bir şey yapıyor ... ama bunu yapmadan önce git status folder, yapın ve bu klasördeki tüm dosyaları 'sildiğini' söylediğinden emin olun
Bengalaa

21

Kullanmak isteyeceksiniz git rm --cached -r <dir>. bu komut aşamalı dizin içeriğini dizinden kaldırır.

Eğer dizin zaten izlenmişse, yeni ve eski dosyaları manuel olarak bulup bunlardan kurtulmanız gerekir

Muhtemelen git reset <dir>bundan sonra dizin içindeki mevcut (ve zaten izlenen) dosyaları sıfırlamak için çalıştırın .


Güncelleme 2019:

Basitçe çalıştırın git reset directory, yeni eklenen tüm dosyaları bozar.


değil git reset <dir>tek başına yeterli?
Bananach

@ Batanach Sadece denedim ve evet, git reset <dir>aynı zamanda işe yarayacağı anlaşılıyor . Cevap 2011'den geliyor, bu yüzden bunun 8 yıl önce çalışıp çalışmadığından emin değilim. Cevabı güncelleyeceğim. İpucu için teşekkürler!
knittl


11

Staj dizini

$ git reset <dir>

Sahnelediğim tüm dosya ve klasörleri etkisiz hale getirir:

$ git add <dir>

İşaretlenmemiş dizini onayla

Dizinin ve içeriğinin evrelemeden kaldırılmasını onaylamak için (örn. "Yapılması gereken değişiklikler") aşağıdakileri çalıştırın:

$ git status

veya

$ git diff --staged --name-only 

önceden hazırlanmış olan klasör veya dosyaların hiçbirinin hala sahnelemediğini onaylamak için.


2

Henüz tamamlanmamış aşamalı bir dosyayı / klasörü kaldırmak için basit bir komut - git restore --staged <dir>.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.