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.