Git hazırlama alanından nasıl dosya kaldırılır?


549

Yerel repo'mda bazı dosyalarımda değişiklikler yaptım ve daha sonra git add -Ahazırladığım aşamaya çok fazla dosya eklediğimi düşündüm. Hazırlama alanından tüm dosyaları nasıl silebilirim?

Bunu yaptıktan sonra, sadece elle yapacağım git add "filename".


2

27
git statuszaten dosyaların bozulmasını istiyorsanız tam olarak ne yapacağınızı söyler.
Michael Foukarakis

6
@MichaelFoukarakis git durumu, terminali çıktıyla (node_modules gibi) dolduruyorsa bir dizinin tamamını bozmak istiyorsanız yararlı değildir
whiterook6

2
Gelecekte, hepsini eklemek yerine git add -pveya git add --patch(aynı olanlar) ile rahat etmek isteyebilirsiniz . Bu bayrak, hangi dosyaları veya bireysel değişiklikleri sahne almak istediğinizi etkileşimli olarak seçmenize olanak tanır - daha sonra, taahhüde dahil ettiğiniz işle çok daha ayrıntılı bir şekilde tanışabilirsiniz.
Gabe

Yanıtlar:


689

Kullanarak dosyaları dizinden kaldırabilirsiniz

git reset HEAD -- path/to/file

Tıpkı git add, dizine ve benzerlerine göre dosyaları özyinelemeden kaldırabilirsiniz, bu nedenle her şeyi aynı anda kaldırmak için bunu deponuzun kök dizininden çalıştırın:

git reset HEAD -- .

Ayrıca, ileride başvurmak üzere, çıktısı git statussize dosyaları bir durumdan diğerine taşımak için çalıştırmanız gereken komutları söyleyecektir.


5
$ git reset HEAD -- .üretilen fatal: Failed to resolve 'HEAD' as a valid ref.herhangi işledi asla Not; onun ilk git addsonragit init
Patrizio Bertoni

5
Ayrıca kullanabilirsiniz git reset @.
alex

@alex Sade olmaktan daha mı iyi git reset?
Antony Hatchkins

7
@AntonyHatchkins @ile eşanlamlıdır HEAD.
alex

Tamamen benim için çalıştı, teşekkürler!
wayneseymour

305

kullanım

git reset

tüm aşamalı dosyaları kaldırmak için.


3
Bunun nasıl farklı olduğunu sorabilir miyim git reset HEAD --ya da aynı işlemi gerçekleştirmenin daha özlü bir yolu mu?
ProNotion

1
@ProNotion Reset HEADvarsayılan olarak kullanır . Bunların amacı nedir --Gözlerinde farklı git reset HEAD --?
Antony Hatchkins

@AntonyHatchkins'i tam bir durak (nokta) izlemeli ve kabul edilen cevaptaki örnekten alınmıştır.
ProNotion

11
@ProNotion Üzgünüm seni yanlış anladım. projedeki tüm dosyaları sıfırlarken git reset HEAD -- .yalnızca geçerli dizindeki ve altındaki dosyaları sıfırlaması farklıdır git reset.
Antony Hatchkins

101

İstenmeyen bir grup dosyayı zaten taahhüt ettiyseniz, bunları etkisiz hale getirebilir ve git'e bunları silinmiş olarak işaretlemesini (gerçekten silmeden) söyleyebilirsiniz.

git rm --cached -r .

--cacheddosyalardan kendilerini kaldırmadan yolları hazırlama ve dizinden kaldırmasını söyler ve -rdizinlerde özyinelemeli olarak çalışır. Ardından git add, izlemeye devam etmek istediğiniz dosyaları yapabilirsiniz .


Sanırım "git rm -."
Alexander Mills

1
"git rm -" ile dosyaları kaldırmamanızla ilgili önemli bir hata var.
Alexander Mills

@AlexMills rmTüm dosyaları bozmak için gerçek seçeneklerden bahsetmek için cevabımı güncelliyorum.
Max

2
Bunu şöyle tek bir dosyada denedim: "git rm --cached my / file.java" ve bu dosyayı hala hazırlama alanında, ancak silindi olarak görüyorum! @ Bu komutu çalıştırdığınızda maksimum dosyalarınız gerçekten siliniyor mu yoksa yalnızca hazırlanıyor mu? Eğer bu davranışı aramıyorsanız, cevap ile giderdim.
OrwellHindenberg

@OrwellHindenberg bunu işaret ettiğiniz için teşekkürler! --cachedgerçekten taahhüt etmiş olduğunuz dosyaları izlemeyi durdurmaktır. Yani dosya aslında silinmez, ama git dosya olduğunu düşünür. Cevabımda bunu açıkladım.
Max

30

Kullanabilirsin

git reset HEAD

ardından ile istediğiniz belirli dosyaları ekleyin

git add [directory/]filename

-X parametresi ekleyebilirsiniz ve yok sayılan dosyalar da kaldırılacaktır. Eğer .gitignore'unuzla uğraşmak ve orada yararlı bir şey (benim durumumda olduğu gibi) varsa yararlıdır. ( git-scm.com/docs/git-clean )
Keeprock

1
Aşırı klasörleri ile, temiz bir çalışma dizinigit status söyleyecektir - yalanlar! Bu işi yaptı, teşekkürler. git clean -df
Leo

5
git clean -dfDosyaların kalıcı olarak silineceğini unutmayın . UNIX benzeri sistemlerde, çağrılacak unlink()ve silinen dosyalarınız kurtarılamayacaktır.
Hanxue

11
OP, dosyaların etiketini kaldırmayı sorar. Dosyaları silmesini öneriyorsunuz. Yanıtlamadan önce evreleme alanının ne olduğunu okumanızı öneririm.
Antony Hatchkins

Kaydedilmemiş projemin tamamını sildiğiniz için teşekkür ederiz.
Vansuita Jr.

7

Diğer cevaplarda belirtildiği gibi kullanmalısınız git reset. Bu, eylemini geri alacaktır git add -A.

Not: git reset eşdeğerdir git reset --mixedyapar ki

Dizini sıfırlar ancak çalışma ağacını sıfırlamaz (yani, değiştirilen dosyalar korunur ancak kesinleştirme için işaretlenmez) ve güncellenmeyenleri bildirir. Bu varsayılan eylemdir. [ git reset ]


2
.. ve hazırlama alanından tek bir dosyayı kaldırmak için şunları yapabilirsinizgit reset filenameToNotCommit
SherylHohman

5

Şimdi v2.24.0 öneriyor

git restore --staged .

dosyalardan etkilenmez.


1

Hazırlama alanını birkaç şekilde sıfırlayabilirsiniz:

  1. HEAD'ı sıfırlayın ve check-in yapmak için gerekli tüm dosyaları aşağıdaki gibi tekrar ekleyin:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    

Bu cevabı mevcut altı cevaptan farklı kılan nedir?
Antony Hatchkins

1

Tüm dosyaları hazırlama alanından
git reset
kaldırmak için - Belirli bir dosya kullanımını kaldırmak için -
git reset "File path"


1

kullanım

git reset HEAD

Bu, tüm dosyaları hazırlama alanından kaldıracaktır


1

Hazırlama alanına istenmeyen dosyalar eklenmiş ancak henüz tamamlanmamışsa, işi basit bir sıfırlama yapar:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Yalnızca geçerli çalışma dizinindeki etiketsiz değişiklikleri kaldırmak için şunu kullanın:

git checkout -- .

0

git reset HEAD <file>...Dosyalardan kaçmak için " " kullanın

örnek: tüm dosyaları kaldırmak için

git reset HEAD .

bir dosyayı bozmak

git reset HEAD nameFile.txt

-3

Tüm bu yöntemi denedim ama hiçbiri benim için işe yaramadı. Kullandığım .git dosyasını kaldırıldı rm -rf .gitformu yerel depoyu ve yeniden yaptım git initve git addve rutin komutlar. İşe yaradı.


4
Git docs Okuma genellikle daha tavsiye aşağıdaki daha ödüllendirdiği xkcd.com/1597 ;)
Antony Hatchkins

1
Belki de özel durumunuzda bir bütünlük probleminiz vardı ve bu seçenek kaldı, ancak önerilmez.
Shad

Lütfen bunu yapma, tüm git repo yok.
Lennart Rolland

-5

Hazırlama alanında zaten var olan dosyanızı geri almanın en iyi yolu git reset -hard'dır . Şimdi dikkatli olun, bu aşamalı ve düzenlenmemiş değişiklikleri kaldıracaktır.


2
Bu yanlış ve tehlikeli !!! OP, dosyaları daha sonra tekrar "manuel olarak eklemek" istiyor ancak --hardonları sonsuza dek siler.
Antony Hatchkins
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.