Git'te izlenmeyen dosyalar nasıl kaldırılır?


110

Bir dal üzerinde çalışıyorum, ana dalımdan daldığım "deneysel" dalda çalışıyorum, sonra deneysel dalda bir kullanıcı modeli oluşturuyorum ama henüz onları dizine eklemiyorum.

Son zamanlarda deneysel dalıma eklenen dosyalardaki tüm değişiklikleri atmak istersem ne yapmalıyım? İzlenmeyen dosyalar aşağıda listelenmiştir:

$ git status
 On branch new_chick
 Untracked files:
   (use "git add <file>..." to include in what will be committed)

       .project
       app/models/user.rb
       db/migrate/
       test/fixtures/users.yml
       test/unit/user_test.rb

Tüm bu değişiklikleri geri alma umuduyla "git reset --hard" çalıştırmayı denedim, ancak yukarıdaki tüm dosyalar hala gösteriliyor.

Lütfen kimse bana biraz ışık tutsun mu?


Yanıtlar:


220

İzlenmeyen dosyaları / dizinleri kaldırmak için şunları yapın:

git clean -fdx

-f - kuvvet

-d - dizinler de

-x - yok sayılan dosyaları da kaldır (yok sayılmış dosyaları kaldırmak istemiyorsanız bunu kullanmayın)


Dikkatle kullanın!
Bu komutlar, ilk başta düşünmediğiniz rastgele dosyaları kalıcı olarak silebilir. Komutlarınıza ince ayar yapmak ve kesinlikle beklenen sonucu elde etmek için tüm ayrıntıları öğrenmek için lütfen bu cevabın altındaki tüm yorumları ve - yardım bölümünü vb. İki kez kontrol edin ve okuyun.


54
Önce önizlemek için -n ekleyin, böylece yanlışlıkla bir şeyleri kaldırmazsınız
Druska

8
Bu harika! Bunun dışında .gitignore'da kasıtlı olarak göz ardı etmiş olabileceğiniz, ancak yine de yerel geliştirme ortamınız için ihtiyaç duyduğunuz yapılandırma dosyalarını da kaldıracaktır. Etkileşimli mod için ekstra -i ile aynı komutu kullanabilirsiniz: git clean -fdxi ve hangi dosyaları silmek istediğinizi soracaktır.
moeabdol

5
Bu harika, ancak kullanıcılara, -xdosyaları kalıcı olarak sileceği için DİKKATLİ KULLANIM için bir uyarı eklemek isteyebilirsiniz . Veya -n@Druska
lacostenycoder'da

3
-xHala kullanılmadı .project ve diğer yapılandırma dosyaları silindi. Depoyu son işlemden yeniden yeni bir dizine çekmek zorunda kaldı.
zaman tutucu

2
Bu komutun potansiyel olarak tehlikeli olduğunu bildirmeniz gerektiğini düşünüyorum çünkü istenen dosyaları kaldırabilir !!!
Davide

20

Kullanıcı etkileşimli yaklaşımı:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y

-i etkileşimli için
-f için zorla
-d
yok sayılan dosyalar için dizin için -x (gerekirse ekleyin)

Not: Sadece ne yapacağını kontrol etmek için -n veya --dry-run ekleyin .


17

Bunlar izlenmeyen dosyalar. Bu, git'in onları izlemediği anlamına gelir. Sadece onları listeliyor çünkü git ignore dosyasında değiller. Git tarafından izlenmediklerinden,git reset onlara dokunmayacaklar.

İzlenmemiş tüm dosyaları ortadan kaldırmak istiyorsanız, en basit yol git clean -f( git clean -nbunun yerine herhangi bir şeyi silmeden neyi yok edeceğini görmek istiyorsanız kullanın). Aksi takdirde, istemediğiniz dosyaları elle silebilirsiniz.


5

İzlenmeyen dosyaları silmek için:

git clean -f

İzlenmeyen dizinleri de silmek için şunu kullanın:

git clean -f -d

Herhangi bir kalp durmasını önlemek için kullanın

git clean -n -f -d


Herhangi bir "kalp durması" 😂😂😂
Rishi Kulshreshtha

2

Yerel deponun önceki durumuna başka bir şekilde de dönebilirsiniz:

  1. İzlenmeyen dosyaları ile hazırlama alanına ekleyin git add.
  2. ile yerel reponun önceki durumuna dönün git reset --hard.


0

Ben de benzer bir sorun yaşadım. En son aldım ancak yerelde birleştirme işleminin belirli bir dosyada gerçekleşmemesi nedeniyle bazı değişiklikler oldu. Dosya izlenmemişti ve onları istemedim, bu yüzden yaptığım şey -

$ git checkout dosya yolu / dosya adı

filepath - git bash'ı yaptığım konum. sonra en son aldığımda değişiklikler mevcuttu


0

Süre git clean eserler de, hala yararlı git repo temizlemek için kendi komut dosyası kullanmak bulmak, bazı avantajları vardır.

Bu, temizlenecek dosyaların bir listesini gösterir ve ardından etkileşimli olarak temizlenip temizlenmemesini ister. Dosya başına etkileşimli olarak sormak sıkıcı hale geldiğinden, neredeyse her zaman istediğim budur.

Ayrıca temizlemek istemediğiniz dosya türleri olduğunda (ve işlememek için bir nedeniniz olduğunda) kullanışlı olan listenin manuel olarak filtrelenmesine de izin verir.


git_clean.sh


#!/bin/bash
readarray -t -d '' FILES < <(
    git ls-files -z --other --directory |
        grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi

echo "Dirty files:"
printf '  %s\n' "${FILES[@]}"

DO_REMOVE=0
while true; do
    echo ""
    read -p "Remove ${#FILES[@]} files? [y/n]: " choice
    case "$choice" in
        y|Y )
            DO_REMOVE=1
            break ;;
        n|N )
            echo "Exiting!"
            break ;;
        * ) echo "Invalid input, expected [Y/y/N/n]"
            continue ;;
    esac
done

if [ "$DO_REMOVE" -eq 1 ];then
    echo "Removing!"
    for f in "${FILES[@]}"; do
       rm -rfv "$f"
    done
fi
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.