Git deposundaki silinmi┼č dosyay─▒ bulma ve geri y├╝kleme


Al─▒nan cevaba git


Git deposunda oldu─čumu s├Âyle. Bir dosyay─▒ siler ve bu de─či┼čikli─či kabul ederim. ├çal─▒┼čmaya devam ediyorum ve biraz daha taahh├╝t ediyorum. Ard─▒ndan, bu dosyay─▒ geri y├╝klemem gerekti─čini ├Â─črendim.

Bir dosyay─▒ kullanarak ├Âdeme git checkout HEAD^ foo.bar yapabilece─čimi biliyorum, ancak bu dosyan─▒n ne zaman silindi─čini ger├žekten bilmiyorum.

  1. Belirli bir dosya ad─▒n─▒ silen taahh├╝d├╝ bulman─▒n en h─▒zl─▒ yolu nedir?
  2. Bu dosyay─▒ ├žal─▒┼čma kopyama geri d├Ând├╝rmenin en kolay yolu ne olurdu?

G├╝nl├╝klerime manuel olarak g├Âz atmak, belirli bir SHA i├žin t├╝m projeyi kontrol etmek ve daha sonra bu dosyay─▒ el ile orijinal proje ├Âdememe kopyalamak zorunda kalmamay─▒ umuyorum.


2683









Cevap say─▒s─▒n─▒ say: 24






Verilen yolu etkileyen son taahh├╝d├╝ bulun. Dosya HEAD taahh├╝d├╝nde olmad─▒─č─▒ndan, bu taahh├╝d├╝n dosyay─▒ silmesi gerekir.

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

Ard─▒ndan, caret ( ^ ) sembol├╝n├╝ kullanarak ├Ânceki s├╝r├╝mdeki s├╝r├╝m├╝ kontrol edin :

 git checkout <deleting_commit>^ -- <file_path>
 

Veya bir komutta $file s├Âz konusu dosya varsa .

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

Zsh kullan─▒yorsan─▒z ve EXTENDED_GLOB se├žene─činin etkinle┼čtirildiyse, ┼čapka simgesi ├žal─▒┼čmaz. Bunun ~1 yerine kullanabilirsiniz .

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

3030







  1. git log --diff-filter=D --summary Silinen t├╝m dosyalar─▒ ve silinen dosyalar─▒ almak i├žin kullan─▒n ;
  2. git checkout $commit~1 path/to/file.ext Silinen dosyay─▒ geri y├╝klemek i├žin kullan─▒n .

$commit 1. ad─▒mda buldu─čunuz taahh├╝d├╝n de─čeri nerede , ├Ârne─čin e4cf499627


827







Bir klas├Ârdeki t├╝m silinen dosyalar─▒ geri y├╝klemek i├žin a┼ča─č─▒daki komutu girin.

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

311


2010-12-02





Bu soruya hen├╝z yeni sildi─čim bir dosyay─▒ geri y├╝klemek i├žin geldim, ancak de─či┼čikli─či hen├╝z yapmam─▒┼čt─▒m. Kendinizi bu durumda bulursan─▒z, yapman─▒z gereken tek ┼čey a┼ča─č─▒daki gibidir:

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


120







E─čer deliyseniz, kullan─▒n git-bisect . ─░┼čte ne yapmal─▒:

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

┼×imdi otomatik testi ger├žekle┼čtirme zaman─▒. '[ -e foo.bar ]' Varsa foo.bar , kabuk komutu 0 d├Ând├╝r├╝r , aksi takdirde 1 d├Ând├╝r├╝r. "Run" komutu git-bisect , testin ba┼čar─▒s─▒z oldu─ču ilk i┼člemi otomatik olarak bulmak i├žin ikili aramay─▒ kullan─▒r. Verilen aral─▒─č─▒n yar─▒s─▒ndan itibaren ba┼člar (iyiden k├Ât├╝ye kadar) ve belirtilen testin sonucuna g├Âre yar─▒ya indirir.

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

┼×imdi onu silen taahh├╝tte bulunuyorsun. Buradan gelece─če atlayabilir git-revert ve de─či┼čikli─či geri almak i├žin kullanabilirsiniz .

 git bisect reset
git revert <the offending commit>
 

veya bir tanesine geri d├Ânebilir ve hasar─▒ manuel olarak inceleyebilirsiniz:

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

90







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'
 

Bir dosyay─▒ kaybettim, birka├ž dakika ├Ânce yanl─▒┼čl─▒kla silindi?
H─▒zl─▒:

 git restore my_deleted_file
 

Kriz ├Ânlendi.


Robert Dailey , yorumlarda a┼ča─č─▒daki di─čer ad─▒ ├Ânermektedir :

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

Ve jegan yorumlarda ekler :

Di─čer ad─▒ komut sat─▒r─▒ndan ayarlamak i├žin bu komutu kulland─▒m:

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

72


2013-02-17





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

Bu dosya i├žin t├╝m taahh├╝tleri listeleyin.

 git log -- path/to/file
 

Son onaylama (en ├╝stteki) dosyay─▒ silmi┼č olan─▒d─▒r. Bu y├╝zden, ikinci bir son i┼člem olana geri d├Ânmelisin.

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

49







Silinen ve taahh├╝t edilen dosyay─▒ geri y├╝klemek i├žin:

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

Git s├╝r├╝m 1.7.5.4'te test edildi.


29







Yaln─▒zca bir de─či┼čiklik yapt─▒ysan─▒z ve bir dosyay─▒ sildiyseniz, ancak i┼čleme koymuyorsan─▒z ve ┼čimdi de─či┼čikliklerinizi yapt─▒n─▒z

 git checkout -- .
 

ancak silinmi┼č dosyalar─▒n─▒z geri d├Ânmedi, yaln─▒zca a┼ča─č─▒daki komutu uygulay─▒n:

 git checkout <file_path>
 

Ve presto, dosyan─▒z geri d├Ând├╝.


25







Bu ├ž├Âz├╝m├╝ ald─▒m .

  1. A┼ča─č─▒daki yollardan birini kullanarak dosyan─▒n silindi─či yerin kimli─čini al─▒n.

    • git log --grep=*word*
    • git log -Sword
    • git log | grep --context=5 *word*
    • git log --stat | grep --context=5 *word* # bir ┼čey hat─▒rlam─▒yorsan─▒z ├Ânerilir
  2. Gibi bir ┼čey almal─▒s─▒n─▒z:

taahh├╝t bfe68bd117e1091c96d2976c99b3bcc8310bebe7 Yazar: Alexander Orlov Tarih: Per┼čembe 12 May─▒s 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┼čembe 12 May─▒s 22:10:22 2011 +0200

3 . ┼×imdi bfe68bd117e1091c96d2976c99b3bcc8310bebe7 taahh├╝t kimli─čini kullanarak yap─▒n:

 git checkout bfe68bd117e1091c96d2976c99b3bcc8310bebe7^1 yourDeletedFile.java
 

Taahh├╝t kimli─či, dosyan─▒n zaten silinmi┼č oldu─ču taah├╝t ba┼čvurusunda bulunurken, ekleyerek yapabilece─činiz bfe68b'den hemen ├Ânce taah├╝t ba┼čvurusu yapman─▒z gerekir ^1 . Bunun anlam─▒: bfe68b'den hemen ├Ânce bana s├Âz ver.


23


2012-03-01





 git checkout /path/to/deleted.file
 

15







git undelete path/to/file.ext

  1. Bunu da .bash_profile (veya bir komut kabu─ču a├žt─▒─č─▒n─▒zda y├╝klenen ilgili di─čer dosyaya) yerle┼čtirin:

     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 ilk ├Ânce bu dosyan─▒n bulundu─ču son i┼člemi bulup bulmad─▒─č─▒n─▒ kontrol eder, daha sonra bu dosyan─▒n bulundu─ču son i┼člemden sonra bu dosya yolunu kontrol eder. kaynak


12







Pek ├žok durumda, ├žekirdek ile birlikte ├žekirdeklerle (grep, sed, vb.) Git'in birlikte kullan─▒lmas─▒ yararl─▒ olabilir . Bu ara├žlar─▒ zaten ├žok iyi biliyorum ama Git daha az. Silinen bir dosyay─▒ aramak isteseydim a┼ča─č─▒dakileri yapard─▒m:

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

D├╝zeltme / taahh├╝t i┼čini buldu─čumda:

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

T─▒pk─▒ di─čerlerinin benden ├Ânce s├Âyledi─či gibi.

Dosya ┼čimdi kald─▒r─▒lmadan ├Ânceki durumuna geri y├╝klenecek. Etraf─▒nda tutmak istiyorsan─▒z, ├žal─▒┼čma a─čac─▒na yeniden vermeyi unutmay─▒n.


11







Bu y├╝zden silinen bir grup dosyay─▒ belirli bir i┼člemden geri y├╝klemek zorunda kald─▒m ve iki komutla ba┼čard─▒m:

 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┼č alana dikkat edin.)

Dosyalar .gitignore dosyas─▒na eklenmi┼č ve daha sonra git rm ile silinmi┼č, dosyalar─▒ geri y├╝klemem gerekiyordu, sonra bunlar─▒ temizledim. Geri y├╝klemek i├žin y├╝zlerce dosyam vard─▒, di─čer dosyalarda oldu─ču gibi her dosya i├žin bir ┼čeyler elle yazmak ├žok yava┼č olacakt─▒.


7


2013-11-29





Asl─▒nda bu soru do─črudan Git , ama benim gibi biri, WebStorm git cli komutlar─▒n─▒ bilmekten ba┼čka VCS gibi GUI ara├žlar─▒yla ├žal─▒┼č─▒yor .

Silinen dosyay─▒ i├žeren yolu sa─č t─▒klat─▒p, ard─▒ndan da ├╝zerine gidip Git t─▒klay─▒n Show History .


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

VCS ara├žlar─▒ t├╝m revizyonlar─▒n trenini g├Âsterir ve her birinin t├╝m taahh├╝tlerini ve de─či┼čikliklerini g├Ârebilirim.


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Sonra arkada┼č─▒m─▒n PostAd.js dosyay─▒ sildi─čini taahh├╝t ederim . ┼čimdi a┼ča─č─▒ya bak─▒n:


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Ve ┼čimdi, arzu silinmi┼č dosyam─▒ g├Ârebiliyorum. Ben sadece dosya ad─▒na ├žift t─▒klay─▒n ve kurtar─▒r.


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Cevab─▒m─▒n Git komut olmad─▒─č─▒n─▒ biliyorum ama ba┼člang─▒├ž ÔÇőÔÇőseviyesindeki ve profesyonel geli┼čtiriciler i├žin h─▒zl─▒, g├╝venilir ve kolay. Webstorm VCS ara├žlar─▒, ├žal─▒┼čmak i├žin m├╝kemmel ve m├╝kemmeldir Git ve ba┼čka bir eklentiye veya araca ihtiya├ž duymaz.


6







 [email protected]:~/work/git$ rm slides.tex
[email protected]:~/work/git$ git pull 
Already up-to-date.
[email protected]:~/work/git$ ls slides.tex
ls: slides.tex: No such file or directory
 

Silinen dosyay─▒ geri y├╝kle:

 [email protected]:~/work/git$ git checkout
D       .slides.tex.swp
D       slides.tex
[email protected]:~/work/git$ git checkout slides.tex 
[email protected]:~/work/git$ ls slides.tex
slides.tex
 

5







Ben de ayn─▒ soruyu sordum. Bilmeden, sarkan bir taahh├╝t yaratm─▒┼čt─▒m .

Sarkan listesi

git fsck --lost-found

Her sarkma taahh├╝d├╝n├╝ inceleyin

git reset --hard <commit id>

Sarkanma taahh├╝d├╝ne ta┼č─▒nd─▒─č─▒mda dosyalarim yeniden ortaya ├ž─▒kt─▒.

git status bu sebepten:

ÔÇťHEAD detached from <commit id where it detached>ÔÇŁ


5







Bizim durumumuzda, dosyalar─▒ yanl─▒┼čl─▒kla bir taahh├╝tte sildik ve bir miktar taahh├╝t daha sonra hatam─▒z─▒ ger├žekle┼čtirdik ve silinen t├╝m dosyalar─▒ geri almak istedik ancak de─či┼čtirilenleri geri almak istedik.

Charles Bailey'in buradaki m├╝kemmel cevab─▒na dayanarak benim bir liner:

 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)
 

4







Dosyalar─▒ silinen taahh├╝d├╝ biliyorsan─▒z, bu komutu <SHA1_deletion> , dosyay─▒ silinen taahh├╝d├╝n oldu─ču yerde ├žal─▒┼čt─▒r─▒n :

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

Borudan ├Ânceki k─▒s─▒m, taahh├╝tte silinen t├╝m dosyalar─▒ listeler; hepsi onlar─▒ eski haline getirme taahh├╝d├╝nden ├ž─▒kar─▒ld─▒.


4







Basit ve kesin

Her ┼čeyden ├Ânce, o dosyaya sahip oldu─čunuz en son kararl─▒ taahh├╝d├╝ al─▒n -

 git log 
 

Diyelim ki $ 460067 tutar─▒nda bir tesad├╝f buldun.

 git checkout <$commitid> $fileName
 

Bu, bu i┼člemdeki dosya s├╝r├╝m├╝n├╝ geri y├╝kler.


2







Dosyan─▒z─▒ silen taahh├╝d├╝ bulun:

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

├ľrnek ├ž─▒kt─▒:

 4711174
 

Git 2.23'ten itibaren asl─▒nda bir restore komut 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
 

Not ^ biz taahh├╝t bir ┼čey geri y├╝klemek istedi─činiz kadar kimli─či tamamlamak sonra ├Ânce dosyay─▒ silindi biri.

--source Arg├╝man anlat─▒r restore nereye 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


2


2019-09-05





Bunun eski bir i┼č par├žac─▒─č─▒ oldu─čunu biliyorum, ancak git revert dosyay─▒ silen i┼činizi her zaman yapabilirsiniz . ( Bu, silme i┼člemindeki tek de─či┼čiklik oldu─čunu varsayar. )

 > git log 
commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3
Author: Dave <[email protected]>
Date:   Thu May 9 11:11:06 2019 -0700

    deleted readme.md
 

Ve ├žal─▒┼čmaya devam ettiyseniz ve daha sonra bu silme i┼člemine karar vermek istemedi─činizi fark ettiyseniz, onu kullanarak geri d├Ânebilirsiniz.

 > git revert 2994bd
 

┼×imdi git log g├Âsterir:

 > git log
Author: Dave <[email protected]>
Date:   Thu May 9 11:17:41 2019 -0700

    Revert "deleted readme"

    This reverts commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3.
 

Ve readme.md depoya geri y├╝klendi.


0







 $ git log --diff-filter=D --summary  | grep "delete" | sort
 

-1







Ben de bu kodu a┼ča─č─▒daki kodu kullanarak ├Ânceki dosyay─▒ yerel dizine al─▒n.

 git checkout <file path with name>
 

a┼ča─č─▒daki ├Ârnek benim i├žin ├žal─▒┼č─▒yor

git checkout resources/views/usaSchools.blade.php

Te┼čekk├╝rler


-1



─░lgili yay─▒nlar


Git: Proje kesinle┼čtirme ge├žmi┼činde silinen bir dosyay─▒ nas─▒l bulabilirim?

Git deposundaki b├╝y├╝k bir dosyay─▒ i┼čleme ge├žmi┼činden nas─▒l kald─▒r─▒r─▒m / silerim?

Git'te silinmi┼č bir dosyay─▒ ay─▒rma

Git deposundaki t├╝m silinmi┼č dosyalar─▒ nas─▒l listeleyebilirim?

Git deposunda birden fazla silinen dosya nas─▒l kald─▒r─▒l─▒r

Git: Herhangi bir havuzdaki dosyalar─▒ silmeden dosyay─▒ dizinden kald─▒rma

Git deposundan yama veya fark dosyas─▒ olu┼čtur ve ba┼čka bir git deposuna uygula

Silinen dosyalar─▒ geri y├╝kleyebilir miyim (bir `git clean -fdx` geri al)?

Git'te Silinmi┼č Bir Dosyay─▒ G├Âr├╝nt├╝leme

Git deposundaki .pyc dosyalar─▒n─▒ yoksay

Etiketle ilgili di─čer sorular [git]


C++ 'da harici "C" nin etkisi nedir?

Zlib, gzip ve zip ile ili┼čki nedir? Ortak neleri var ve nas─▒l farkl─▒lar?

JavaScript'te birden fazla de─čer d├Ând├╝r├╝ls├╝n m├╝?

Yapay Sinir A─člar─▒nda ├ľnyarg─▒ Rol├╝

Sembolik bir link ile sert link aras─▒ndaki fark nedir?

DEX'in Java kaynak koduna d├Ân├╝┼čt├╝r├╝lmesi

VS2013'te referans say─▒lar─▒ nas─▒l gizlenir?

Bir fonksiyonun i├žinde de─či┼čtirdikten sonra de─či┼čkenim neden de─či┼čmiyor? - Asenkron kod referans─▒

JQuery ile HTML karakterlerinden ka├žma

CPU'nuz bu TensorFlow binaryinin kullan─▒m─▒ i├žin derlenmedi─či talimatlar─▒ desteklemektedir: AVX AVX2