git reset --hard HEAD izlenmemiş dosyaları geride bırakır


584

Ben çalıştırdığınızda git reset --hard HEAD, anladığım kadarıyla Bana kalsa şeyin bozulmamış sürümüne sıfırlamak gerekiyordu. Ne yazık ki, git statusizlenmeyen dosyaların büyük bir listesini gösterir gibi, etrafında yatan dosyaları bırakır .

Git nasıl "TAMAMEN'e geri getir, son çekişte ne var, başka bir şey yok, daha az bir şey yok"?


44
git reset --harddizininizi sıfırlar ve izlenen dosyaları HEAD'de oldukları gibi durumuna geri döndürür. İzlenmeyen dosyaları yalnız bırakır.
fifigyuri

Yanıtlar:


904

git clean -f -dÇalışma kopyanızdaki izlenmemiş dosya ve dizinlerden kurtulmak için kullanmanız gerekir.

Tüm git alt modüllerini de içeren deponun tamamını master olarak sıfırlamanız gerekiyorsa, şu komut dosyasını çalıştırın:

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status

56
Ayrıca -x.gitignored dosyalarınızı kaldırmak ve bozulmamış bir duruma geri dönmek istiyorsanız.
jtdubs

44
-nTeste ekle önce kaldırılır. hepsini tek bir argümanda birleştirin:-dfn
HyBRiD

31
Ortak komutum git clean -qfdxburada. Her şeyi çıkarın ve sessizce yapın.
aragaer

3
-d -f-dffiçin iki kez iptal edilebilir -d -f -f, bu korumalı izlenmemiş dizinler dahil olmak üzere TÜM izlenmemiş dizinleri siler.
ThorSummoner

3
@BKSpurgeon: evet, dosyaları siler. »İzlenmemiş dosyaları daha önce oldukları gibi istiyorum« ile ne demek istiyorsun? Git, izlenmeyen dosyalar hakkında var olmaları dışında hiçbir şey bilmez. Bu dosyaların birden fazla sürümünü izlemez ( izlenmediği için ).
knittl

60

Hala saklamak istediğiniz dosyalarınız varsa:

git clean -di yalnızca artık istemediğiniz dosyaları / dizinleri silmenize olanak tanıyan etkileşimli bir temizlik yapar.


48
git reset --hard && git clean -dfx

veya zsh bir 'gpristine' takma adı sağlar:

alias gpristine='git reset --hard && git clean -dfx'

Bu gerçekten kullanışlı.

Çatallı bir repo üzerinde çalışıyorsanız, doğru repo / daldan aldığınızdan ve sıfırladığınızdan emin olun, örneğin:

git fetch upstream && git reset --hard upstream/master && git clean -df

8
Bu güvenli bir komut değilse özür dilerim - güvende olmaya çalışmıyordum, soruyu cevaplamaya çalışıyordum. Bunun soruyu cevaplayıp yanıtlamadığı hakkında yorum yapabilir misiniz?
jjnevis

3
Bu iyi çalışıyor ve git IMHO içine inşa edilmelidir (rutin olarak -x kullanacağımdan emin değilim). Birçok kez yerel bir proje üzerinde çalışıyorum, henüz github vb. İle senkronize edilmedi ve dağınık bir refactor IDE 'geri al' durumunun ötesine geçiyor. İçgüdüm, son taahhüdüne geri dönmek, ancak bunun için googling genellikle son taahhüt değil, sondan bir önceki taahhüdün cevaplarını alır. Tüm yapmak istediğim en son taahhütlere geri dönmek. Bunu yapar. Yine de daha kolay bir yol olmalı. Teşekkürler Linus! ;-)
Dell Anderson

5
Aynı zamanda dosyaları göz ardı siler çünkü tehlikeli olan -xsadece repo klonlanmış olsaydın gibi. Eğer istediğin buysa, mükemmel. İzlenmeyen dosyaları silmek istiyorsanız , -xseçeneği kaldırmak iyi çalışır.
Emile Bergeron

2
Şükür içingpristine
Snowcrash

2
ve intellij ayarlarını siler;)
Soni

17

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 kuvvet için
-d dizin için -d
yok sayılan dosyalar için (gerekirse ekleyin)

Not: Yalnızca ne yapacağını denetlemek için -n veya --dry-run ekleyin .


4

Kullanabilirsiniz git stash. Belirtmeniz gerekir --include-untracked, aksi takdirde orijinal sorunla karşılaşırsınız.

git stash --include-untracked

Sonra son girişi saklayın

git stash drop

Bunun için kullanışlı-züppe bir takma ad oluşturabilir ve git wipeörneğin arayabilirsiniz :

git config --global alias.wipe "! git stash -q --include-untracked && git stash drop -q"

2

Aradığınız komut git clean


4
Bir dahaki sefere biraz daha açıklama / örnekler vb. Ekleyin. Kullanıcının ne yaptığını ve bu durumda hangi parametreleri kullanacağını anlamasına yardımcı olan ne olursa olsun.
rugk

1

git-clean Çalışma ağacındaki izlenmemiş dosyaları kaldırmak için kullanın. Komutla kullanabileceğiniz bazı seçenekler (kısaca) aşağıda verilmiştir git clean.

-dhiçbir yol belirtilmediğinde kullanın. Böylece git izlemini izlenmeyen dizinlere geri alın.

-f/--force İç içe geçmiş izlenmemiş dosyaları kaldırmak için.

-i/--interactive Ne yapılacağını gösterin ve dosyaları etkileşimli olarak temizleyin.

-n/--dry-run Hiçbir şeyi kaldırmadan ne olacağını gösterin.

-x dosyaları yoksay

örnek: git clean -f -d-> Geçerli dizindeki izlenmemiş tüm dosyaları alt dizinlerden kaldırın.


-16

Bir noktada yumuşak bir sıfırlama yapmış olabilirsiniz, bu sorunu yaparak çözebilirsiniz.

git add .
git reset --hard HEAD~100
git pull

7
OP'nin bunu istediği sanmıyorum. Diğer cevapların her ikisi de, bunu nasıl düzelteceğinizi göstermede çok daha iyi bir iş çıkarıyor.
Avery

1
Eklenecek çok fazla dosyanız varsa bu da yavaş olabilir.
Devin G Rhode

4
tamamen ilgisiz.
Azeem Hassni

1
Bunu yaptığınızda, izlenmeyen dosyalar kaldırılır. Ancak programcılar olarak, herkes geçici çözümler ve gülümseme kullanmadan problemler için doğru çözümü bulmaya çalışmalıdır.
Yuresh Karunanayake
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.