Bir çalışma dizinde taahhüt edilmemiş değişiklikleri kurtarmak için herhangi bir yolu var mı git reset --hard HEAD?
git reset --hard somewheregerçekten tehlikeli git komutlarından biridir.
Bir çalışma dizinde taahhüt edilmemiş değişiklikleri kurtarmak için herhangi bir yolu var mı git reset --hard HEAD?
git reset --hard somewheregerçekten tehlikeli git komutlarından biridir.
Yanıtlar:
Sen olamaz genelde kaydedilmemiş değişiklikleri geri almak.
Önceden sahnelenen değişiklikler ( git add) dizin nesnelerinden kurtarılabilir olmalıdır, bu nedenle bunu yaptıysanız, git fsck --lost-foundkendisiyle ilgili nesneleri bulmak için kullanın . (Bu, nesneleri .git/lost-found/dizine yazar ; oradan git show <filename>her dosyanın içeriğini görmek için kullanabilirsiniz .)
Değilse, buradaki cevap şu olacaktır: yedeklemenize bakın. Belki editör / IDE'niz geçici kopyaları / tmp veya C: \ TEMP altında saklar ve bunun gibi şeyler saklar . [1]
git reset HEAD@{1}
Bu önceki HEAD'a geri dönecek
[1] vim örneğin isteğe bağlı olarak kalıcı geri almayı depolar , eclipse IDE yerel geçmişi depolar ; Bu tür özellikler,
bu SO cevap
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
Günün geri döndü! :)
git checkout HEAD@{19}, kayıp dosyaları müstakil durumda kontrol etmeme izin verdi. Daha sonra git checkout -b new-branch-namebunları "ekli" durumda repoya geri eklemek için kullanılır .
git checkout -b new-branch-name. Pragmatik Sürüm Kontrolü Git'i kullanma kitabı Git'i basit terimlerle açıklamakta iyidir.
git reset --hardBugün de talihsiz değişiklikler yaparken, bugün de repo'mda koştum . Geri almak için, git fsck --lost-foundtüm referanssız lekeleri yazan koştum <path to repo>/.git/lost-found/. Dosyalar taahhüt edilmediğinden, onları içindeki otherdizinde buldum <path to repo>/.git/lost-found/. Oradan, kullanılmayan dosyaları görebilir git show <filename>, lekeleri kopyalayabilir ve yeniden adlandırabilirim.
Not: Bu yalnızca dizine kaydetmek istediğiniz dosyaları eklediyseniz (kullanarak git add .) çalışır. Dosyalar dizinde bulunmamışsa, kaybolurlar.
lost-found. Ama sonra git showiçeriği almak için yapabilirdim .
#!/bin/bash cd PATH_TO_PROJECT/.git/lost-found/other FILES=* COUNTER = 0 for f in $FILES do echo "Processing $f file..." git show $f > "PATH_TO_RECOVERY_DIRECTORY/$COUNTER.m" let COUNTER=COUNTER+1 done
Evet, git'teki donanım sıfırlamasından KURTARABİLİRSİNİZ.
kullanın:
git reflog
Taahhüdünüzün tanımlayıcısını almak için. Sonra kullan:
git reset --hard <commit-id-retrieved-using-reflog>
Bu numara hayatımı birkaç kez kurtardı.
Reflog belgelerini BURADA bulabilirsiniz .
git reset --hardbaşkasını kullanmaktan kurtarmak için sezgisel görünebilir, git reset --hardancak --hardanahtarı kullanmazsanız , çalışma alanınızda az önce kurtardığınız işi etkili bir şekilde geri alacak girişlerle kalırsınız.
git logişlemin kimliğini görmedim. git reflogBen ile taahhüt kimliği görebiliyordu
Yerel bir proje üzerinde çalışırken, onu GitHub'a taşımak istedim ve sonra yeni bir depo oluşturdum. Tüm bu dosyaları .gitignore ile yeni depoya eklemeye çalışırken, yanlışlıkla yanlış bir dosya ekledim ve sonra temizlemeye çalıştım.
Koştum git reset --hard origin/master : P
Daha sonra depo boş olduğu için tüm yerel dosyalarım silindi. Her şeyin gittiğini sanıyordum.
Bu hayatımı kurtardı:
git reflog show
git reset HEAD@{1}
git push
Umarım başka bir hayat kurtarır.
git reset HEAD@\{27\} , teşekkür ederim!
git reflog showkontrol etmek için kullanıyorum ve kullandığım ilk taahhüttengit reset HEAD@{number}
IntelliJ gibi bir şey kullanıyorsanız:
Bağlam menüsünde Yerel Geçmiş'i seçin ve alt menüden Geçmişi Göster'i tıklatın:
Bir proje veya klasörün yerel geçmiş görünümü, son birkaç gün içinde yaptığınız her şeyi gösterir. İletişim kutusunun alt kısmındaki İşlem sütununda, geri almak istediğiniz eylemi seçin. [...] Böylece, iletişim kutusunun üst kısmı değiştirilen dosyaların ağaç görünümünü gösterir. Yalnızca silinen dosyayı geri yüklemek isterseniz, o zamandan beri yapılan diğer değişikliklere bakılmaksızın, ağaç görünümünde Lost.txt dosyasını seçip Geri Al düğmesini tıklayabilirsiniz.
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
Bu sadece kıçımı ateşten çıkardı!
git reflogişe yaramadı çünkü değişiklikleri yapmadım. git fsck --lost-foundaşamalı dosyalar için çalıştı ancak hepsi sahnelenmedi. IntelliJ'in Yerel Geçmişi kaydedilmemiş dosyalarımı mükemmel bir şekilde kurtardı, bu özellik için çok minnettarım
git reset --hardTaahhütsüz değişikliklerimi yeni yaptım ve kaybettim. Neyse ki, bir editör (IntelliJ) kullanıyorum ve değişiklikleri Yerel Geçmişten kurtarabildim. Eclipse aynısını yapmanıza izin vermelidir.
Tanım olarak, git reset --hard Git'in onları kurtarması için taahhüt edilmemiş değişiklikleri atar (yedekleme sisteminiz yardımcı olabilir, ancak Git değil).
Aslında, git reset --hard iyi bir fikir . Çoğu durumda, aynı şeyi yapmak için daha güvenli bir komut vardır:
Taahhütsüz değişikliklerinizi atmak istiyorsanız, kullanın git stash. Çalışırsanız bir süre sonra sona erecek olan bu değişikliklerin bir yedeğini tutar git gc. % 99,9'dan bu değişikliklere asla ihtiyacınız olmayacağından eminseniz,git stash % 0,1 vakası için hala arkadaşınızdır. % 100 eminseniz, o git stashzaman hala arkadaşınız çünkü bu% 100'ün bir ölçüm hatası var ;-).
HEADTarihte mevcut dalın ve ipucunuzu taşımak istiyorsanız , o zaman git reset --keeparkadaşınızdır. Aynı şeyi git reset --hardyapacak, ama yapacak değil yerel değişiklikleri atmak.
Her ikisini de yapmak istiyorsanız, o zaman git stash && git reset --keep , arkadaşınızdır.
Parmaklarınızı kullanmamayı öğretin, git reset --hardbir gün geri ödeyecek.
git stash && git reset --hardherhangi biri saklanmış herhangi bir içeriği silecekse bu doğru mu?
git reset --hardzulayı atmaz. git stashyerine geçer git reset --hardo yerine kalıcı olarak atarak onları güvende tutan dışında sizin worktree gelen uncommited değişiklikleri kaldırır anlamında.
bir taahhüdü yanlışlıkla sıfırlarsanız, bunu yapın,
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
HEAD@{2}geri dönmek istediğiniz durum olduğunu varsayarsak
Bazı değişiklikleri kaybedersem genellikle bunu yaparım.
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
işaretçiyi önceki işlemlerinize geri taşımak, ancak şu ana kadar yaptığınız değişiklikleri son işlemlerinizin kasasında saklamak için git reset --soft dadada
Bilgiler kaybolur.
Taahhüt yapmadığınız için .git'iniz bu bilgileri hiçbir zaman saklamadı. Yani, temel olarakgit sizin için kurtaramaz.
Ancak, yeni yaptıysanız git diff, aşağıdaki 3 basit adımla terminal çıkışını kullanarak kurtarmanın bir yolu vardır.
git diff. O / p'yi diff.patch adlı bir dosyaya kaydedinpatch -p1 < diff.patch) yöntemini uygulayınKurtarıldınız! :)
Not: Verileri terminalden bir dosyaya kopyalarken, dikkatli olun ve verilerin sürekli çıktı olduğunu ve artık veri içermediğini (yukarı ve aşağı oklara basması nedeniyle) açıkça görün. Aksi takdirde dağıtabilirsin.
Ben aynı sorunu koştu ve neredeyse deli gidiyordu .... başlangıçta projeyi taahhüt ve birleştirilmiş .. daha sonra ben çalışmayı denediğimde git push --set-upstream origin master bu hatayı alıyorum
fatal: refusing to merge unrelated histories
bu yüzden koştu git reset --hard HEADve 3 hafta proje sildi ama aşağıdaki birkaç komut gün kurtarmak:
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
Bu yardımcı olur umarım
Yaptıktan sonra bir taahhüt geri alabilirsiniz reset --hard HEAD .
" git reflog" Öğesinin geçmişini kontrol etmek için kullanınHEAD .
Burada taahhüdünüzü ve kimliğini göreceksiniz.
Yapın
git reset {commit Id of the commit you want to bring back}
git reset --hard <commit>Git geçmişinden kaldırılmadan önce herhangi bir taahhüt edilmemiş dosyanın zor yolunu öğrendim . Ancak, saçımı çektiğim süre boyunca kod düzenleyici oturumumu açık tutacak kadar şanslıydım control + z, etkilenen dosyaların her birinde basit bir dosyanın Git'ten önceki sürüme geri döndüğünü keşfettim. özellikle istemediğim her şeyi sıfırlayarak sıfırlayın.Hooray!!
git reset HEAD@{4}
4, 4 adımdan önce yapılan değişikliklerdir. doğru bir adım seçerseniz, zordan kaldırdığınız dosyaların listesini göstermelidir. o zaman yap:
$ git reflog show
size önceden oluşturduğumuz yerel taahhüt geçmişini gösterecek. Şimdi yap:
$ git reset --hard 8c4d112
8c4d112, sabitinizi sıfırlamak istediğiniz bir koddur. daha fazla bilgi almak için https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-history adresine bakalım .
Doğru cevap. Tamam, şimdi gitmeyi seviyorum. :-) İşte daha basit bir tarif.
git log HEAD@{2}
git reset --hard HEAD@{2}
"2", değişikliklerinizi taahhüt ettiğiniz yere geri dönüş sayısıdır. Benim durumumda, meslektaşım ve patron tarafından bazı inşa sorunlarının ayıklanmasına yardımcı olmak için kesintiye uğradı; böylece, bir sıfırlama yaptı - iki kez sert; yani HEAD ve HEAD @ {1} aşırı yazılmıştır. Vay be, bizim çok çalışmamızı kaybederdi.
yaptım git reset --hard yanlışlıkla yanlış proje (biliyorum ki ...) üzerinde. Sadece bir dosya üzerinde çalışmıştım ve komutu çalıştırdığım sırada ve sonrasında hala açıktı.
Taahhüt etmemiş olsam da, eski dosyayı basit ile geri alabildim COMMAND + Z.
Bu SO'dan referans cevap,
Git reflog show çalıştırdıktan sonra 9300f9d taahhüt etmek istediğinizi söyleyin
git reset çalıştırdıktan sonra 9300f9d
git durumunu yapabilirsiniz ve ardından değişikliklerinizi geri yüklemek için dosyalarınızı kontrol etmeniz gerekebilir
git checkout - dosyayolu / adı
Netbeans üzerinde geliştiriyorsanız, dosya sekmeleri ve dosya düzenleme alanı arasında arayın. Bir "Kaynak" ve "Tarih" vardır. "Geçmiş" te, sürüm kontrolü (git / other) kullanılarak yapılan değişiklikleri ve aynı zamanda yerel olarak yapılan değişiklikleri görürsünüz. Bu durumda, yerel değişiklikler sizi kurtarabilir.
( cevap bir kullanıcı alt kümesine uygundur )
(Son zamanlarda) macOS kullanıyorsanız ve Time Machine diskinizden uzakta olsanız bile, işletim sistemi yerel anlık görüntüler adı verilen saatlik yedeklemeler kaydetmiş olacaktır .
Time Machine'e girin ve kaybettiğiniz dosyaya gidin. İşletim sistemi size şu soruları soracaktır:
The location to which you're restoring "file.ext" already contains an
item with the same name. Do you want to replace it with the one you're
restoring?
Kaybettiğiniz dosyaları kurtarmanız gerekir.
Aynı kodla açık bir IDE'niz varsa, değişiklik yaptığınız her dosyada bir ctrl + z yapmayı deneyin. Git reset yaptıktan sonra değişmeyen değişiklikleri kurtarmama yardımcı oldu - sert.
Git reset --hard yaptığımızda ve tüm yerel işlem dışı değişiklikler silinir. Değişiklikleri geri almak için - IDE'de dosyayı tıklatın, dosyayı tarihe göre listeleyen Yerel geçmiş ile karşılaştırın ve verileri kurtarabiliriz. Günün kurtuldu!
git reset. Bu komuta ihtiyacınız yok ve tehlikeli, bu yüzden kullanmayın. Şubeyi önceki taahhüdüne geri döndürmekgit rebase -ive istemediğiniz taahhütleri düşürmek veya şube ucunu hareket ettirmek içingit checkout(başını ayırır)git branch -M. Birincisi yerel değişikliklerle çalışmayı reddeder ve daha sonra yalnızca yerel olarak değiştirilmiş dosyalar revizyonlar arasında farklılık göstermezse çalışır.