Git olmayan etiketsiz dosyaların teslim alınmasını geri alabilir


164

Git checkout aracılığıyla yerel çalışma ağacımdaki dosyalardaki değişiklikleri yanlışlıkla atarım. Dosyalar şu anda sahnelenmiyor. Bu kasayı "geri almak" mümkün müdür?


Hayır, yapamayız, ama eğer tutulma kullanıyorsanız Ekibi -> Yerel Tarih
USM

Yanıtlar:


106

Bir dosya değiştirilmiş ancak henüz eklenmemiş (aşamalı), tamamen "özel" olduğuna inanıyorum.
Dizin veya HEAD sürümü üzerine yazılırsa GIT tarafından geri yüklenemeyeceği anlamına gelir (mevcut çalışmanızın bir kopyasına sahip olmadığınız sürece). "

"Özel" içerik yalnızca geçerli dizininizde görünür, ancak Git'e hiçbir şekilde kaydedilmez.


5
Bir 'özel' dosyada yapılan değişikliklerin git tarafından geri alınamayacağını anlıyorum. Ancak, dosya git (örneğin yoluyla git checkout --) tarafından değiştirilmişse , bu işlemi belki de geri alabilmesini beklerdim reflog. Bu yanlış bir beklenti mi?
Ciprian Tomoiagă

2
@CiprianTomoiaga reflog geçmiş referanssız taahhütler içindir. Geri yüklemek istediğiniz şey taahhüt edilmediyse (veya aşamalı değilse), reflog size yardımcı olmaz.
VonC

3
@CiprianTomoiaga her türlü özel içerik için (henüz eklenmedi) sadece editörünüze veya IDE özelliğinize güvenirsiniz. Tutulmaya
VonC

5
Vaov! Unbelieable. Bir dosyaya bakmam gerekiyordu, bu yüzden yazmayı düşündüm git checkout folders/subfolders/fileama folderişime girdikten sonra kazayla enter tuşuna bastım . / klavyeme girmekten 1 cm uzakta ve sık sık farklı klavye düzenlerine sahip makineler arasında geçiş yapıyorum, bu yüzden parmaklarımın 10-15 dakikaları yeni pozisyonlara alışıyor. Git'in işini kaybetmemek için yolunun gitmediğini söylese de, 2018'de git'in dosyaları çöpe attığına inanmak zor.
gman

1
@gman IDE tarafından sağlanan "yerel tarih" hakkındaki aşağıdaki cevap işinizi kurtarmanıza yardımcı oluyor mu?
VonC

174

Bir "profesyonel" IDE kullanıyorsanız, dosyaları yerel bir Geçmişten geri yükleyebilirsiniz. Örneğin Rubymine'de dosyaları sağ tıklayabilir ve git değişikliklerinden bağımsız bir değişiklik geçmişini izleyebilirsiniz, şimdi birkaç kez beni kurtardı ^^


37
FYI bu özellik tüm "profesyonel" IDE'ler JetBrains ailesinde mevcuttur: Pycharm, IDEA, PHPStorm, Webstorm. Bugün fırınlamamı kurtardım. Teşekkürler Christoph!
Ben Roberts

6
Size teşekkür etmeliyim. WebStorm kullanıyorum ve oldukça sık kullanmama rağmen bu özelliği tamamen unuttum. Ben sadece kod kaybını yakaladım, bunu düşünmedim!
Tyson Phalp


5
süper. Sublime2 undo ayrıca disk üzerinde yanlışlıkla git checkout tarafından yapılan değişiklikleri geri aldı.
shuckc

8
Birisi bu iş parçacığını XCode'da bazı işleri yok ettiğinde bulursa, Otomatik Kaydetme geçmişini almanın bir yolu vardır. XCode'un otomatik kaydetme geçmişini görmek için bir menü girişi yoktur, ancak saklar. Söz konusu dosyaları TextEdit'te açarsanız, Geri dönebilir ve Dosya> Geri Al altındaki Otomatik Kaydetme geçmişine bakabilirsiniz.
qingu

66

Sublime Text gibi bir editörde çalışıyorsanız ve söz konusu dosya hala açıksa, ctrl + z tuşlarına basabilirsiniz ve git checkout'tan önceki durumuna geri dönecektir.


9
Bu cevap benim günüm kaydedildi. Çok teşekkürler!
feyyaz

Bu düzeltmeyi kazara tökezledim ve yeni bir cevap göndermek üzereydim. Sublime, Git'i dosya değişiklik geçmişindeki dosya durumunu değiştirerek yakalar.
Timmah

Ecipse'de benim için çalıştı.
Anomali

4
Visual Studio Code için de çalıştı
intotecho

44

Maalesef değişiklikleriniz kayboldu. Özel değişikliklerinizin üzerine yazılır. Eğer yapmadıysa git stashönce yapma ödeme ...

Daha parlak taraftan alın: Artık işleri daha iyi uygulayabilirsiniz;)


26

IDE'nizdeki yerel geçmişi kontrol edin.


Sadece değişikliklerimi sahnelememekle bir hata yaptım ve ödeme yapmaya zorladım. Android Studio'da yerel geçmişimi kontrol ettim (görüntüle -> son değişiklikler) ve yaptığım son değişiklikleri geri aldım. Buradan daha fazla bilgi jetbrains.com/help/idea/2016.3/...
emen

Bu RubyMine'de mükemmel bir şekilde çalışır, değişikliklerinizi silme eylemine "Dış değişiklik" olarak atıfta bulunulur. Bu Marcin için çok teşekkürler, sadece bir saat kayıp işimi kurtardı!
AndrewSouthpaw

25

OS X üzerinde geliştirme mi yapıyorsunuz? Kullanımı Xcode? Şansınız var!

Qungu tarafından yapılan bir açıklamada açıklandığı gibi , OS X, zaman makinesi kullanmasanız bile dosyaların otomatik olarak kaydedilmiş bir sürüm geçmişini korur .

Dolayısıyla, evcilleştirilmemiş yerel değişikliklerinizi dikkatsizce havaya uçurduysanız git checkout ., muhtemelen tüm işinizi nasıl kurtarabilirsiniz.

Birisi bu iş parçacığını XCode'da bazı işleri yok ettiğinde bulursa, Otomatik Kaydetme geçmişini almanın bir yolu vardır. XCode'un otomatik kaydetme geçmişini görmek için bir menü girişi yoktur, ancak saklar. Söz konusu dosyaları TextEdit'te açarsanız, Geri dönebilir ve Dosya> Geri Al altındaki Otomatik Kaydetme geçmişine bakabilirsiniz.

Bu harika ve dün benim için bir günlük iş hakkında iyileşti.


Sen sorabilir git komut satırı UI yok Neden," yazılım mühendisliğinde kullanılan premier VCS2016 2017 20182019, en azından dosyaları uçurmadan önce yedekle? Bildiğiniz gibi, son otuz yıldır iyi yazılmış yazılım araçları. "

Veya belki de, "Neden bu delicesine harika dosya geçmişi özelliği TextEdit'te erişilebilir, ancak gerçekten ihtiyacım olan yerde Xcode'da değil?"

... ve her ikisi de, sanırım, size sektörümüz hakkında çok şey anlatacak. Ya da belki gidip bu araçları tamir edersiniz. Bu süper olurdu.


2
Bunun işe yaradığını doğrulayabilirim. Bu bana saatler süren işimi kurtardı!
Bruno Rocha

ilgili dosya Modelmaalesef olduğu için benim için çalışmadı
brahimm

@brahimm Model?
Benjohn

1
Bu beni bir ton gönül yarası kurtardı. Çok teşekkür ederim.
squarefrog

1
Çok ilginç: Kaynak dosyamı sağ tıklayıp "Birlikte Aç" menüsüne baktım. Hem TextEdit 1.14 hem de TextEdit 1.6 seçenek olarak oradaydı. Yalnızca TextEdit 1.14, eski düzeltmelere dönme seçeneğine sahipti. UI tıpkı TimeMachine gibi çok güzeldi.
bugloaf

7

VSCODE'da ctrl + z (geri al) benim için çalıştı

Bunun git checkout .yerine yaptım git add .ve tüm dosya değişiklikleri kayboldu.

Ama şimdi command + zmac'umda kullanarak , değişiklikleri kurtardım ve benim için bir ton çalışma kaydetti.


başka bir yol var mı?
Abdul Manan


2

Bu tür bir durum için etkili bir kurtarıcı Time Machine (OS X) veya benzer bir zaman tabanlı yedekleme sistemidir. Beni birkaç kez kurtardı çünkü geri dönüp sadece bir dosyayı geri yükleyebilirim.


1
Sevgili downvoter - lütfen bu cevabı nasıl geliştirebileceğimi açıklayabilir misiniz?
sscirrus

1

Sadece başıma geldi, saatlerce çalışma içeren bir klasöre baktım! Neyse ki, IDE Netbeans'imin her dosyanın bir geçmişini sakladığını öğrendim, bu da birkaç şeyi manuel olarak düzeltmem gerektiğine rağmen malzemelerin% 99'unu geri kazanmamı sağladı.



0

Teknik olarak evet. Ancak sadece belirli durumlarda. Örneğin kod sayfanız yukarıdaysa ve git checkout'a basarsanız ve yanlışlıkla yanlış sayfayı veya başka bir şeyi kontrol ettiğinizi anlarsınız. Sayfaya gidin ve geri al'ı tıklayın. (benim için, komut + z) ve eski güzel git kasasını vurmadan önce bulunduğunuz yere geri dönecektir.

Sayfanız kapalıysa bu işe yaramaz ve sonra git kasasına basarsanız. Yalnızca gerçek kod sayfası açıksa çalışır


0

Eğer bir terminal / ile çalışıyorsanız açık istemi cmd ve unstaged değişiklikleri (gösterdi olurdu herhangi git komutları kullanılır diff, add -p, checkout -psen unstaged değişiklikleri bulacaksınız, vs.), ve terminal / beri istemi cmd kapatmamışsanız yukarıda belirtilen git komutlarını çalıştırdığınız yere gittiğinizde hala kullanılabilir.


0

Kanka,

Diyelim ki benim gibi şanslı bir adamsın, editörüne geri dön ve geri al (mac için command + Z), kayıp içeriğinizi dosyada görmelisiniz. Umarım yardımcı olmuştur. Tabii ki, bu sadece mevcut dosyalar için çalışacaktır.


-1

Belki de değişikliklerin kaybolmaz. "Git reflog" u kontrol edin

Aşağıdaki makaleyi alıntıladım:

"Temel olarak Git'in içinde, verilerin depolandığı her eylemi gerçekleştirirsiniz, bu verileri reflog'un içinde bulabilirsiniz. Git, verilerinizi kaybetmemek için gerçekten çok çaba sarf eder, bu nedenle sahip olduğunu düşündüğünüz bir nedenden dolayı, kazabilirsiniz git reflog kullanarak "

Ayrıntılara bakınız:

http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html


3
Umutlarınızı yukarı kaldırmayın - reflog sadece git ile anlamlı bir şekilde etkileşime girdiyseniz yardımcı olur. Sadece bir dosyayı düzenledikten sonra bir git kasasıyla uçuruyor musunuz? git'in hiç şansı yoktu.
Bob Gilmore

1
Benden 1 - onun bahsetmemiz düşünün git reflogburada, ben geri almayı arıyordum bu cevabı bulundu git checkout HEAD .- Ben yazmak için geliyordu git reset HEAD .- Sadece bir '--soft BAŞ ~ 1 reset Git' yapmış ve bilmiyordu Hakkında git reflogyaptığım işi geri alabildim :)
Russell England

1
Ne yazık ki git checkout <revision> ve git checkout <path> tamamen farklı ve ilişkisiz iki komuttur. İlki yerel değişikliklerinizi tutarken ikincisi tutmaz.
Göl
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.