Git deposunda silinmiş bir dosyayı bulma ve geri yükleme


2802

Bir Git deposunda olduğumu söyle. Bir dosyayı silerim ve bu değişikliği taahhüt ederim. Çalışmaya devam ediyorum ve biraz daha taahhütte bulunuyorum. Sonra, bu dosyayı geri yüklemem gerektiğini fark ettim.

Kullanarak bir dosyayı teslim alabileceğimi biliyorum git checkout HEAD^ foo.bar, ancak o dosyanın ne zaman silindiğini bilmiyorum.

  1. Belirli bir dosya adını silen taahhüdü bulmanın en hızlı yolu nedir?
  2. Bu dosyayı çalışma kopyama geri getirmenin en kolay yolu nedir?

Günlüklerime manuel olarak göz atmam, belirli bir SHA için tüm projeye göz atmam ve daha sonra bu dosyayı el ile orijinal proje ödememe kopyalamam gerekmediğini umuyorum.


39
önceki yorumun , dosyanın ne zaman silindiğini öğrenmeyi içeren, başlıkta değil, başlıkta soruyu yanıtladığını unutmayın .
avdgaag

8
Bir dosyanın kaydedildiği taahhüdü bulmak için:git log --diff-filter=D -- path/to/file
titaniumdecoy



54
@hhh git checkout deletedFilesilme işlemi geri alınır deletedFilesilindikten ama bu silme eğer henüz olmamıştır aşamalı veya taahhüt . Burada sorulan şey bu değil; Bu soru, silinmesi birçok taahhütte önce yapılmış olan bir dosyanın nasıl geri yükleneceği ile ilgilidir.
Mark Amery

Yanıtlar:


3150

Verilen yolu etkileyen son taahhüdü bulun. Dosya HEAD işleminde olmadığından, bu işlemin silinmiş olması gerekir.

git rev-list -n 1 HEAD -- <file_path>

Ardından, caret ( ^) sembolünü kullanarak, daha önce kaydedilen sürüme bakın :

git checkout <deleting_commit>^ -- <file_path>

Veya bir komutta, $filesöz konusu dosya ise.

git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"

Zsh kullanıyorsanız ve EXTENDED_GLOB seçeneğini etkinleştirdiyseniz, düzeltme işareti simgesi çalışmaz. Bunun ~1yerine kullanabilirsiniz .

git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"

94
Zor bit, ^ son ekini kullanarak, taahhütten ÖNCE kontrol etmektir. Teşekkürler.
Christian Oudard

4
Nedense, bu zsh'da çalışmaz. ± git checkout $(git rev-list -n 1 HEAD "spec/Sporkfile_example.rb")^ -- "spec/Sporkfile_example.rb" zsh: no matches found: b71c152d8f38dcd23ad7600a93f261a7252c59e9^ Ben bash geçti & rağmen iyi çalıştı.
zoras

20
Windows komut satırından bir hata aldım. error: pathspec <filename> did not match any file(s) known to git.. Çözüm git bash kullanmaktı.
donturner

56
: inandıklarımla, ancak '~ 1' alternatif sözdizimini kullanabilirsiniz '^' üzerinde kendi genişleme var zsh sahiptir @zoras git checkout <deleting-commit>~1 -- <file-path> böylece ~ 1 önce taahhüt olduğunu ~ X taahhüt belirtilen önce X kaydedilmesini belirlemenizi sağlar, ~ 2 önce iki taahhüt, vb
Nils Luxton

22
Windows cmd isteminde, ^karakter kaçış karakteri! Bu nedenle, cmd'de, ^^cmd'ye tek bir değişmez ^ istediğinizi ve bundan sonra başka bir şeyden kaçmadığınızı söylemek için yazmanız gerekir. Birçok insana olan şey ^, onu bir boşluk izlemesidir. Cmd uzaydan kaçtığınızı düşünüyor - bu sadece bir boşluk karakteri veriyor. Böylece git, cli argümanlarını aldığında görür SHA1ve görmez SHA1^ . Gerçekten sinir bozucu. ~bir kaçış karakteri değil, bu yüzden hala çalışıyor. (PS. Google çalışanlarının bu bilgileri isteyeceğini düşünüyorsanız, lütfen bu yorumu oylayın)
Alexander Bird

875
  1. git log --diff-filter=D --summarySilinen dosyaları ve silinen tüm taahhütleri almak için kullanın ;
  2. git checkout $commit~1 path/to/file.extSilinen dosyayı geri yüklemek için kullanın .

$commit1. adımda bulduğunuz taahhüdün değeri nerede , ör.e4cf499627


10
meraklı, ~ 1 ne anlama geliyor?
tommy chheng

7
@tommy - tilde spec size adlandırılan taahhütün n. torununu verecektir. Daha fazla bilgi için book.git-scm.com/4_git_treeishes.html adresine bakın.
Robert Munteanu

5
bu açık ara en kolay ve sezgisel yaklaşımdır. git log -- *PartOfMyFileName*. İçin teşekkürler$commit~1
bgs

3
git checkout $commit~1 filenamesözdizimi bireysel dosyalar için mükemmel çalışır ve aynı zamanda bütün dizinleri için çalışır. yani: sha 12345 den ./images tüm silinen görüntüleri geri: git checkout 12345~1 images. bu cevap için teşekkürler!
noinput

34
@Alexar $commit~1, taahhüdün adını eklemeniz gerektiği anlamına gelir. 1d0c9ef6eb4e39488490543570c31c2ff594426cNerede $commitolduğu gibi bir şey .
Eugene

319

Silinen tüm dosyaları bir klasöre geri yüklemek için aşağıdaki komutu girin.

git ls-files -d | xargs git checkout --

1
Dosyalar nereye aktarılıyor? Hiçbir değişiklik görmüyorum.
William Grand

21
Bu muhtemelen en kolay yöntemdir. En gitbasit görevi bile ne kadar zorlaştırdığı sapkın .
jww

git checkout - [dosya], [dosya] daki değişiklikleri geri alır. Boru [dosya] yerine silinen dosyaların adını koyacaktır.
Manu

6
ls-filesAlt komut kullanışlı olmakla birlikte ortadan kalkmış dosyalar için işe görünmüyor git rmyani OP ne sordu olan şöyle dursun, işlenen düzenledi.
MarkHu

Bu, silinen dosyaları geri yüklemek için çalıştı, ancak değiştirilen ve daha M myChangedFilesonra olduğu gibi görünen dosyaları nasıl güncelleyebilirim git checkout?
libby

124

Bu soruya yeni sildiğim bir dosyayı geri yüklemek için geldim ama değişikliği henüz yapmamıştım. Kendinizi bu durumda bulmanız durumunda, tek yapmanız gereken aşağıdakilerdir:

git checkout HEAD -- path/to/file.ext


93

Eğer deliysen, kullan git-bisect. İşte yapmanız gerekenler:

git bisect start
git bisect bad
git bisect good <some commit where you know the file existed>

Şimdi otomatik testi yapma zamanı. Shell komutu '[ -e foo.bar ]'varsa 0 foo.bar, aksi takdirde 1 döndürür. "Run" komutu git-bisect, testin başarısız olduğu ilk komutu otomatik olarak bulmak için ikili aramayı kullanır. Verilen aralığın yarısından (iyiden kötüye) başlar ve belirtilen testin sonucuna göre yarıya indirir.

git bisect run '[ -e foo.bar ]'

Şimdi onu silmiş olan işlemdesiniz. Buradan, geleceğe geri dönebilir git-revertve değişikliği geri almak için kullanabilirsiniz ,

git bisect reset
git revert <the offending commit>

veya bir taahhütte bulunup hasarı manuel olarak inceleyebilirsiniz:

git checkout HEAD^
cp foo.bar /tmp
git bisect reset
cp /tmp/foo.bar .

2
Üzerinde durur musun git bisect run '[ -e foo.bar ]'?
avdgaag

Otomatik olarak kontrol edilemeyen bir şeyse manuel olarak iyi ve kötü de kullanabilirsiniz. İkili adam sayfasına bakınız.
Josh Lee

1
@avdgaag git bisect runGit'e komutun 0bir goodsürüm için geri dönmesi gereken 'run' sözcüğünü izleyerek komutu bölmeyi otomatikleştirmesini söyler ( git help bisectayrıntılar için bkz .). '[ -e foo.bar ]'Dosya halinde test için standart bir ifadesidir foo.barvar (uygulama dosyasında genellikle yapar /usr/bin/[genellikle için hardlinked edilir /usr/bin/test) ve tekli quation işaretleri tek komut satırı argümanı olarak tüm bu koymak için kullanılır.
Mikko Rantalainen

İyi fikir. Bu yaklaşımı denedim ve silme işleminden önce bir taahhüt belirledi, ancak dosyayı gerçekten silen taahhüdü değil. Ve başka bir testte, silinmeden önce 2 taahhüt belirledi.
Michael Osofsky

Çılgın? Olabilir. Ancak bisect, bir hatanın nereden tanıtıldığını bulmanıza yardımcı olmak için harika bir yoldur ve bu yüzden yine de öğrenmek için değerli bir beceridir. Bu yüzden belki de 'doğru' veya en 'doğru' yol olmasa da, hala iyi bir fikir ve kesinlikle +1 değerinde!
Pryftan

77

Dayalı Benim yeni favori takma, bonyiii 'ın cevabı (upvoted) ve 'hakkında kendi cevap a Git takma komutuna bir tartışmayı iletin ':

git config alias.restore '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)~1 -- $(git diff --name-status $(git rev-list -n 1 HEAD -- $1)~1 | grep '^D' | cut -f 2); }; f'

Birkaç dosya önce yanlışlıkla silinen bir dosyayı kaybettim?
Hızlı:

git restore my_deleted_file

Kriz önlendi.

Uyarı, Git 2.23 (Q3 2019) ile birlikte (!) Adlı deneysel komut gelir git restore.
Bu takma adı yeniden adlandırın (aşağıda gösterildiği gibi).


Robert Dailey yorumlarda aşağıdaki takma adı önermektedir :

restore-file = !git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"

Ve jegan ekler yorumlarda :

Diğer adı komut satırından ayarlamak için şu komutu kullandım:

git config --global alias.restore "\!git checkout \$(git rev-list -n 1 HEAD -- \"\$1\")^ -- \"\$1\"" 

7
Bu, yalnızca istenen dosyayı değil, tüm taahhüdü geri yükler.
Daniel Bang

5
İşte benim takma adım, harika çalışıyor:restore-file = !git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1"
void.pointer

1
@RobertDailey Harika görünüyor! Daha fazla görünürlük için diğer adınızı yanıta ekledim.
VonC

1
Komut satırından diğer adı ayarlamak için bu komutu kullandım:git config --global alias.restore "\!git checkout \$(git rev-list -n 1 HEAD -- \"\$1\")^ -- \"\$1\""
jegan

2
Expansion of alias 'restore' failed; '!git' is not a git command
Karl Morrison

55

Dosya adını biliyorsanız, bu temel komutlarla kolay bir yoldur:

Söz konusu dosya için tüm taahhütleri listeleyin.

git log -- path/to/file

Son işlem (en üstteki) dosyayı silen işlemdir. Bu yüzden son taahhüdü tamamlamak için ikincisini geri yüklemeniz gerekir.

git checkout {second to last commit} -- path/to/file

Sadece bu çözümü kullandım ve silme konusunda hiçbir taahhüt yoktu. Gerçi en son işlem kimliğini kullanarak dosyayı geri yükleyebildim.
Adam

Bir sonraki son işlem (önceki silme işlemi) silinmiş dosyanın en son sürümünü içermez mi? İkinci-son (önceki silme işleminden önceki taahhüt) umutsuzca eskimiş olabilir.
Suncat2000

1
Bu gördüğüm ilk çözüm, bir dahaki sefere bulmak için buraya geri dönmek zorunda kalmayacağım kadar basit. Olabilir.
Eloff

@ Suncat2000 "sondan ikinci", "sondan sonraki" ile aynı "silme işlemine önceki taahhüt" anlamına gelir. en.wiktionary.org/wiki/penultimate#Synonyms
wisbucky

Bu cevap için milyonlarca kez teşekkürler !!!!!
Rakesh Bk

29

Silinmiş ve kaydedilmiş bir dosyayı geri yüklemek için:

git reset HEAD some/path
git checkout -- some/path

Git 1.7.5.4 sürümünde test edilmiştir.


1
Bu benim için işe yaramadı. Ödeme yapıldıktan sonra error: pathspec 'foo' did not match any file(s) known to git.dosya adının doğru olduğundan emin oldum. Git Sürüm 2.7.0
Wisbucky

1; Bu yanlış. Bu komutlar henüz tamamlanmamış bir silme işlemini geri alır (ilki aşamalıysa silme işlemini engeller ve ikincisi dosyadaki değişmemiş değişiklikleri atar), ancak burada kararlı bir dosyayı geri yükleyeceklerini iddia ediyorsunuz sadece doğru olmayan ve yukarıdaki @ wisbucky'nin yorumunda böyle bir hata ile başarısız olacak dosyanın silinmesi.
Mark Amery

@MarkAmery Gerçekten, bu komutun kaldırılan dosyalar için taahhütte bulunma konusunda açık bir aşama yapmayan geliştiriciler için iyi çalıştığını düşünüyorum git add -A, ancak geri yüklenen dosya hala kararlı olmayan aşamadaydı.
Fedir RYKHTIK

25

Yalnızca değişiklik yaptıysanız ve bir dosyayı sildiyseniz ancak taahhütte bulunmadıysanız ve şimdi değişikliklerinizden ayrıldınız

git checkout -- .

ancak silinen dosyalarınız geri dönmedi, sadece aşağıdaki komutu uygularsınız:

git checkout <file_path>

Ve presto, dosyanız geri döndü.


24

Bu çözümü buldum .

  1. Aşağıdaki yollardan birini kullanarak dosyanın silindiği taahhüdün kimliğini alın.

    • git log --grep=*word*
    • git log -Sword
    • git log | grep --context=5 *word*
    • git log --stat | grep --context=5 *word* # hiçbir şeyi hatırlamıyorsanız önerilir
  2. Gibi bir şey almalısınız:

taahhüt bfe68bd117e1091c96d2976c99b3bcc8310bebe7 Yazar: Alexander Orlov Tarih: Per Mayıs 12 23:44:27 2011 +0200

replaced deprecated GWT class
- gwtI18nKeySync.sh, an outdated (?, replaced by a Maven goal) I18n generation script

taahhüt 3ea4e3af253ac6fd1691ff6bb89c964f54802302 Yazar: Alexander Orlov Tarih: Per May 12 22:10:22 2011 +0200

3 . Şimdi bfe68bd117e1091c96d2976c99b3bcc8310bebe7 taahhüt kimliğini kullanarak:

git checkout bfe68bd117e1091c96d2976c99b3bcc8310bebe7^1 yourDeletedFile.java

Taahhüt kimliği, dosyanın zaten silinmiş olduğu komuta referansta bulunduğundan, ekleyerek yapabileceğiniz bfe68b'den hemen önce taahhüdüne başvurmanız gerekir ^1. Bu şu anlama geliyor: bfe68b'den hemen önce taahhütte bulun.


Bu, kabul edilen cevapla aynı yaklaşımdır, ancak silme taahhüdünü bulmanın bazı yolları vardır. Kabul edilen cevapta alınan yaklaşımı hala seviyorum, ancak bunlar iyi alternatifler. Teşekkürler!
avdgaag

Önce silinen dosyayı kontrol ettikten sonra (değiştirmeden) dosyanın bir kopyasını oluşturmadığını varsayıyorum . Sağ? (Bunu resimlerle yapmam gerekiyor ve kopyalar veri havuzunu
büyütür


12

git undelete path/to/file.ext

  1. Bunu .bash_profile(veya bir komut kabuğunu açtığınızda yüklenen diğer ilgili dosyaya) koyun :

    git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'
    
  2. Sonra kullan:

    git undelete path/to/file.ext
    

Bu takma ad önce bu dosyanın bulunduğu son taahhüdü bulmak için denetler ve sonra bu dosyanın bulunduğu son işlemden bu dosya yolunun Git çıkışını yapar. Kaynak .


11

Birçok durumda, Git ile birlikte coreutils (grep, sed, vb.) Kullanmak yararlı olabilir . Bu araçları zaten çok iyi tanıyorum, ama Git daha az. Silinmiş bir dosyayı aramak isteseydim, aşağıdakileri yapardım:

git log --raw | grep -B 30 $'D\t.*deleted_file.c'

Revizyon / taahhüt bulduğumda:

git checkout <rev>^ -- path/to/refound/deleted_file.c

Tıpkı diğerlerinin benden önce söylediği gibi.

Dosya artık kaldırılmadan önceki durumuna geri yüklenecektir. Etrafında tutmak istiyorsanız, onu çalışma ağacına yeniden vermeyi unutmayın.


7

Silinmiş dosyaları bir grup belirli bir taahhütten geri yüklemek zorunda kaldı ve iki komut ile başardı:

git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git checkout <rev>^ -- 
git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git reset HEAD 

(Her komutun sonundaki boşluğa dikkat edin.)

Dosyalar .gitignore dosyasına eklenmiş ve daha sonra ile temizlenmiştir git rm. Dosyaları geri yüklemem gerekiyordu, ama sonra onları etkisiz hale getirdim. Geri yüklemek için yüzlerce dosyam vardı ve diğer örneklerde olduğu gibi her dosya için elle bir şeyler yazmak çok yavaş olacaktı.


7

Aslında bu soru doğrudan Git ile ilgili, ama benim gibi biri WebStorm VCS gibi GUI araçlarıyla çalışıyor Git CLI komutlarını bilmek dışında .

Silinen dosyayı içeren yolu sağ tıklatıp Git'e gidip Geçmişi Göster'i tıklıyorum .

Resim açıklamasını buraya girin

VCS araçları tüm revizyon trenini gösterir ve her birinin tüm taahhütlerini ve değişikliklerini görebilirim.

Resim açıklamasını buraya girin

Sonra arkadaşımın PostAd.jsdosyayı silmesini taahhüt ederim . şimdi aşağıya bakın:

Resim açıklamasını buraya girin

Ve şimdi, benim arzu silinen dosyayı görebiliyorum. Dosya adını çift tıklıyorum ve kurtarıyor.

Resim açıklamasını buraya girin

Cevabımın Git komutları olmadığını biliyorum, ancak yeni başlayanlar ve profesyonel geliştiriciler için hızlı, güvenilir ve kolay. WebStorm VCS araçları Git ile çalışmak için harika ve mükemmeldir ve başka bir eklenti veya araca ihtiyaç duymaz.


1
Bu harika! Teşekkür ederim. JetBrains IDE'lerinden herhangi birini kullananlar için kesinlikle daha kolay bir çözüm.
Fabiano Arruda

Resim varsa dosyayı nasıl geri yükleriz?
Nodirabegimxonoyim

Sevgili @FabianoArruda, JetBrains IDE'leri geliştirme için güçlü araçlardır. Güzel yorumlarınız için teşekkürler.
AmerllicA

Teşekkürler sevgili @PeterMortensen baskı için.
AmerllicA

6

Ben de aynı soruyu sordum. Bilmeden sarkan bir taahhüt yaratmıştım .

Sarkan taahhütleri listele

git fsck --lost-found

Her sarkan taahhüdü inceleyin

git reset --hard <commit id>

Sarkan işime geçtiğimde dosyalarım yeniden belirdi.

git status bu sebepten:

“HEAD detached from <commit id where it detached>”


2
Çok teşekkür ederim. Binlerce kod satırını geri yüklememe yardım ettin.
Reuben

5
user@bsd:~/work/git$ rm slides.tex
user@bsd:~/work/git$ git pull 
Already up-to-date.
user@bsd:~/work/git$ ls slides.tex
ls: slides.tex: No such file or directory

Silinen dosyayı geri yükleyin:

user@bsd:~/work/git$ git checkout
D       .slides.tex.swp
D       slides.tex
user@bsd:~/work/git$ git checkout slides.tex 
user@bsd:~/work/git$ ls slides.tex
slides.tex

2
Soru, silindikten ve değişiklik yapıldıktan sonra bir dosyayı geri yüklemekle ilgiliydi. Bu yanıt, yalnızca çalışma dizininde kaldırılan bir dosyayı geri yüklemekle ilgilidir.
akaihola

Bu doğru ve aradığım şey buydu.
Hola Soy Edu Feliz Navidad

4

Dosya (lar) ı silme taahhüdünü biliyorsanız, bu komutu çalıştırın; burada <SHA1_deletion>dosyayı silen komut :

git diff --diff-filter=D --name-only <SHA1_deletion>~1 <SHA1_deletion> | xargs git checkout <SHA1_deletion>~1 --

Borudan önceki kısım, yürütmede silinmiş tüm dosyaları listeler; Bunların hepsi, onları geri yüklemek için önceki taahhüdünden ödeme yapar.


4

Dosyanızı silen taahhüdü bulun:

git log --diff-filter=D --oneline -- path/to/file | cut -f -d ' '

Örnek çıktı:

4711174

Git 2.23 itibariyle aslında bir restorekomut var. Öyle hala deneysel sonra yazabilirsiniz ama (bu durumda 4711174) Bir çıkarıldı şey işlemek geri yüklemek için:

git restore --source=4711174^ path/to/file

Daha önce taahhütten bir şey geri yüklemek istediğimiz için taahhüt kimliğinden sonraki ^ notuna dikkat edinDosyayı .

--sourceArgüman anlatır restorenereye geri dosyası (ler) aramak için komut ve herhangi işlemek ve hatta dizin olabilir.

Bakınız: git 2.23.0 için git-restore doc


4

Bizim durumumuzda yanlışlıkla bir taahhütte dosyaları sildik ve bazıları daha sonra hatamızı gerçekleştirdik ve silinen tüm dosyaları geri almak istedik, ancak değiştirilenleri geri almak istedik.

Charles Bailey'nin mükemmel cevabına dayanarak, benim tek astarım:

git co $(git rev-list -n 1 HEAD -- <file_path>)~1 -- $(git diff --name-status $(git rev-list -n 1 HEAD -- <file_path>)~1 head | grep '^D' | cut -f 2)

2

Basit ve hassas

Her şeyden önce, bu dosyayı sahip olduğunuz en son kararlı kararlılığı alın -

git log 

Diyelim ki $ taahhütlü 1234567 buldunuz ...

git checkout <$commitid> $fileName

Bu işlem, söz konusu işlemdeki dosya sürümünü geri yükler.


1

Bunu yapmanın en iyi yolu için deneyin.


İlk olarak, dosyanızı silmiş olan kesinliğin kimliğini bulun. Silinen dosyaları taahhütlerin bir özetini verecektir.

git log --diff-filter = D - özet

git ödeme 84sdhfddbdddf ~ 1

Not: 84sdhfddbddd senincommit id

Bu sayede silinen tüm dosyaları kolayca kurtarabilirsiniz.


1

Her zaman git revertdosyayı silen taahhüdünüzü yapabilirsiniz . ( Bu, silme işleminin taahhütteki tek değişiklik olduğunu varsayar. )

> git log
commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3
Author: Dave <dave@domain.com>
Date:   Thu May 9 11:11:06 2019 -0700

    deleted readme.md

Ve çalışmaya devam ettiyseniz ve daha sonra bu silme taahhüdünü vermek istemediğinizi fark ederseniz, şunu kullanarak geri alabilirsiniz:

> git revert 2994bd

Şimdi git loggösteriyor:

> git log
Author: Dave <dave@domain.com>
Date:   Thu May 9 11:17:41 2019 -0700

    Revert "deleted readme"

    This reverts commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3.

Ve readme.mddepoya geri yüklendi.


Soru, dosya silindikten sonra bir dizi taahhüdün yapıldığını varsaydığından ve sonraki işlemlerin istenmeyen olduğuna dair bir gösterge olmadığından, bunun açıklanan durumda OP'ye yardımcı olması muhtemel görünmemektedir.
Jonathan Leffler

1
Evet! Sonraki işlemleri yapabilir ve yine de silme taahhüdünü geri alabilirsiniz. Dolayısıyla, 111 numaralı komut dosyası siler ve 222, 333, 444 numaralı
komutları

0

Ayrıca yerel bir dizine önceki bir dosyayı almak için aşağıdaki kodu kullanarak bu sorun var:

git checkout <file path with name>

Aşağıdaki örnek benim için çalışıyor:

git checkout resources/views/usaSchools.blade.php


Lütfen sorunun ne olduğunu
belirtin

Silme işlemi zaten yapıldı. Bu durumda geri yükleme taahhüdünü belirtmeniz gerekir.
sba


-1

Silme işlemi tamamlanmadıysa, aşağıdaki komut silinen dosyayı çalışma ağacında geri yükler.

$ git checkout -- <file>

Aşağıdaki komutu kullanarak çalışma ağacındaki tüm silinen dosyaların bir listesini alabilirsiniz.

$ git ls-files --deleted

Silme işlemi tamamlandıysa, bulunduğu yeri bulun, sonra dosyayı bu işlemden kurtarın.

$ git rev-list -n 1 HEAD -- <file>
$ git checkout <commit>^ -- <file>

Kurtarılacak dosyanın yolunu arıyorsanız, aşağıdaki komut silinen tüm dosyaların bir özetini görüntüler.

$ git log --diff-filter=D --summary

-1

Git ile silinen tüm dosyaları geri yüklemek için şunları da yapabilirsiniz:

git checkout $(git ls-files --deleted)

Burada git ls-files --deleted, silinen tüm dosyaları listeler ve git checkout $(git command)bir parametredeki dosya listesini geri yükler.

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.