git taahhüt edilmemiş veya kaydedilmemiş tüm değişiklikleri geri al


Yanıtlar:


1620
  • Bu, hazırladığınız tüm dosyaları bozar git add:

    git reset
    
  • Bu, tüm yerel taahhüt edilmemiş değişiklikleri geri alacaktır (repo kökünde yürütülmelidir):

    git checkout .
    

    Ayrıca, taahhüt edilmemiş değişiklikleri yalnızca belirli bir dosya veya dizine geri döndürebilirsiniz:

    git checkout [some_dir|file.txt]
    

    Taahhüt edilmemiş tüm değişiklikleri geri almanın başka bir yolu (yazmak daha uzun, ancak herhangi bir alt dizinden çalışıyor):

    git reset --hard HEAD
    
  • Bu, tüm yerel izlenmemiş dosyaları kaldıracağından yalnızca git izlenen dosyalar kalır:

    git clean -fdx
    

    UYARI: -x tarafından belirtilenler de dahil olmak üzere tüm yok sayılan dosyaları kaldıracaktır .gitignore. -nSilinecek dosyaların önizlemesi için kullanmak isteyebilirsiniz .


Özetlemek gerekirse: aşağıdaki komutların yürütülmesi temel git cloneolarak orijinal kaynaktan yeni bir şeyle eşdeğerdir (ancak hiçbir şeyi yeniden indirmez, bu yüzden çok daha hızlıdır):

git reset
git checkout .
git clean -fdx

Bunun tipik kullanımı, ağacınızın kesinlikle temiz olduğundan emin olmanız gerektiğinde, herhangi bir değişiklik veya yerel olarak oluşturulmuş nesne dosyası veya yapı oluşturma olmadığından ve çok hızlı çalışmasını ve yeniden yapılmamasını istediğinizde yapı komut dosyalarında olacaktır. her deposu klonlayın.


@turibe doğru. İndirilen tüm bağımlılıkları ve .idea klasörümü kaldırdığı için projemi birkaç kez başlatmak zorunda kaldım. Daha iyi bir çözüme ihtiyacınız var.
EresDev

2
@EresDev, yürütmeniz gerekmez, taahhüt git cleanedilmemiş değişiklikleri geri alır, ancak izlenmeyen veya eklenen tüm dosyaları saklar. Ancak, izlenmeyen bazı dosyalar karışıyor olabileceğinden derleme sonucunu etkileyebilir. Örneğin .idea dizininiz bozulmuşsa ne olur?
mvp

git resetKurtarmam gereken değişiklikler olduğunu söyledi
Daniel Springer

1
çalışan git clean -fdxsilindi benim node_modulesve .env, büyük
fires3as0n

1
@ fires3as0n Başka ne bekliyordun? Bu gerçekleşmek zorundaydı. Cevapta da bir uyarı var.
Rishav

148

Taahhüt edilmeyen tüm değişiklikleri " geri almak " istiyorsanız, şunu çalıştırın:

git stash
git stash drop

İzlenmemiş dosyalarınız varsa (çalıştırarak kontrol edin git status), bunlar çalıştırılarak kaldırılabilir:

git clean -fdx

git stashstash @ {0} olacak yeni bir depo oluşturur . Önce kontrol etmek isterseniz, git stash listsaklamak için bir liste görebilirsiniz. Şuna benzeyecektir:

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Her bir saklanma, önceki tamamlama mesajından sonra adlandırılır.


2
Gerçekten iyi bir çözüm ama daha git add .önce kullanarak değişiklikleri aşamalı yapmanız gerekiyor git stashçünkü daha sonra bile git stash
değişmemiş

21

ayrıca git stash- yerel değişikliklerinizi "saklayan" ve daha sonra tekrar uygulanabilecek veya artık gerekmiyorsa bırakılabilecek

stashing hakkında daha fazla bilgi


12

Kaynak ağacı kullanıyorum .... Tüm kolay değişiklikleri 2 kolay adımla geri alabilirsiniz:

1) sadece çalışma alanı dosya durumunu sıfırlamanız gerekiyor

resim açıklamasını buraya girin 2) tüm kararsız dosyaları seçin (command + a), sağ tıklayın ve kaldır'ı seçin

resim açıklamasını buraya girin

Bu kadar basit: D


Sıfırlanan ve daha sonra sıfırlanan dalda şube ve rebase değiştirirseniz bu zarar verir. Sıfırlama yararlıdır, ancak taahhüt edilmeyen değişiklikleri bırakmak için kullanılmamalıdır. Taahhütsüz değişikliklerin düşmesi durumunda sadece saklamak ve saklamak.
Dinu Nicolae

10

Yaptığım şey

git add . (adding everything)
git stash 
git stash drop

Bir astar: git add . && git stash && git stash drop


bu en iyisi
Madrugada

7

Tutulma ile git clean -f -doluşturulan bir dosyanın silindiği geri alma işlemi yapıp yapamayacağını araştırmak için buraya ulaşanlar ,

Ref için "yerel geçmişten geri yükle " seçeneğini kullanarak kullanıcı arayüzünden de aynısını yapabilirsiniz: Yerel geçmişten geri yükleme


3
Oy vermedim, ancak cevabınız niyetinizde net değil. cevabın ilk cümlesini yeniden yazmanız faydalı olacaktır.
Mark Schultheiss

5

Bir taahhütten yeni taahhütlere geçiş yapan devletler

0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed

Durum geçişi için eylem

0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"

Farkı kontrol et

0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD

Son işleme geri dön

2->1: git reset
1->0: git checkout .     #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx     #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD

Hiçbir şeyi yeniden indirmeden git klonuna eşdeğer

git reset && git checkout . && git clean -fdx

Bunun sorulan soru ile nasıl ilişkili olduğunu görmüyorum. Bu sadece herhangi bir gerçek madde olmadan garip tarifler serisidir.
mvp
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.