2012-10-10 23 views
5

Bir süre önce bazılarında sildiğim bazı kodları geri almak istiyorum. Kodun ne olduğunu hatırlamıyorum, ama çok yararlı bir şey yaptığını hatırladım, ama onu sildim çünkü ihtiyaç duymayacağımı düşündüm. Ancak, şimdi bu koda geri ihtiyacım var, ama sadece hangi işlevin olduğunu hatırlıyorum.git: silinen içeriği bul; Ben sadece çevreleyen içeriği biliyorum

Diğer bilgi: bu işlevi içeren dosyada toplam 500 satır kod bulunur. Kodun bir noktada göründüğünü bildiğim 30 işlem aralığı var.

Bu soru yüksek düzeyde bir sorundur. İstediğim bilgileri almak için bildiğim bilgileri nasıl kullanabilirim? Eğer fonksiyon adı veya herhangi bir başka önemli kelime ya da değişken hatırlayabiliyorsanız

+3

Sorununuz çözüldü mü?Eğer öyleyse, eğer cevaplardan birini kabul ederseniz yardımcı olur ya da başkalarının bilgiden faydalanmasını sağlayabilirseniz çok iyi olur! –

cevap

0

, o zaman deneyebilirsiniz rev1 ve rev2 senin taahhüt aralığının sınırları git grep

git grep <regexp> $(git rev-list <rev1>..<rev2>) 

. Tüm taahhüt içeriğini (silme dahil) grep edecektir, böylece kodunuzu kesinlikle bulacaksınız. Daha fazla ayrıntı için

--reverse 

Yürüme tarihinin ileriye yerine geriye ile How to grep (search) committed code in the git history?

+0

Anladığım kadarıyla, bu işlev ismini içeren tüm kod satırlarını verecek mi? Eğer öyleyse, bu satırları istemiyorum, bende olanlar istiyorum. Ancak, silinen kod, işlev adının diffs'te görünmesi için işlev adının başına yakın değildir. Ayrıca, işlevin kendisi her işlemdedir. Maalesef bu bana yardım etmiyor. - –

+0

numaralı bir şeyi yanlış anlamadığım sürece, işlev isminiz var, hala var ve ona yakın bir kod arıyorsunuz değil mi? o zaman hangi dosyaya bakacağını biliyorsun; 'git blame' gibi iş yapacak – CharlesB

1

kullanım git suçu görüyoruz. Bir satırın göründüğü revizyonu göstermek yerine, bu, bir çizginin var olduğu son revizyonu gösterir. Bu, START..END gibi bir dizi düzeltmeyi gerektirir.

veya ilgi kod

3
  1. yapabileceğiniz en iyi arama kelimelerinden ile nerede görüneceğini biri bulmak için 30 kaydedilmesini ikili arama yapmak ikiye bölmek git ile oynamaya çalışın. Bir işlev adı,

    git log -Sfunction 
    

    mükemmel olacaktır.

  2. Eğer her 's değişiklik taahhüt de arayabilirsiniz bir model varsa:

    git log --grep=pattern 
    

    Will listede bu desen içeren kararlıdır. Duyarsız eşleşme için -i'u ekleyin.

  3. Aksi

    git log -p FIRST...LAST | less 
    

    size tam metnini verecektir düzenli ifade eşleşmesi

    için --regex ekleyin. Sen ...


Oh arama, ya da sadece tarama görsel kaydırmak ve başladı. PS. Eğer uzun bir fonksiyonudur söz yana, sadece

git log --stat FIRST...LAST 

yapmak Ve fark istatistiklerinde birçok silme() ile dosyalar için izleyebiliriz.

+1

'git log -S' benim için benzer bir durumda harika çalıştı. Bir süre önce silinmiş bir Ruby sınıfında kullanılan kodu görmem gerekiyordu ve bu bana doğru geliyordu. Korku veren! :) –