Git deposuna taahhüt mesajıyla nasıl arama yapılır?


828

GIT'e bazı kaynak kodlarını "Build 0051" komut mesajıyla kontrol ettim.

Ancak, artık bu kaynak kodunu bulamıyorum - komut satırını kullanarak bu kaynağı GIT deposundan nasıl ayıklayabilirim?

Güncelleme

  1. SmartGIT kullanılarak 0043, 0044, 0045 ve 0046 sürümlerinde kontrol edildi.
  2. 0043'ü kontrol etti ve farklı bir dalda 0051'e kadar sürümleri kontrol etti.
  3. 0043'ü tekrar kontrol ettim.
  4. Şimdi, 0051 ortadan kayboldu.

Güncelleme

Kaynak kodu kesinlikle orada, şimdi bu bir kontrol meselesi:

C:\Source>git log -g --grep="0052"
commit 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
Reflog: HEAD@{10} (unknown <Mike@.(none)>)
Reflog message: commit: 20110819 - 1724 - GL: Intermediate version. File version:  v0.5.0 build 0052.
Author: unknown <Mike@.(none)>
Date:   Fri Aug 19 17:24:51 2011 +0100

    20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052.

C:\Source>




2
Yanıtlar Yığın Taşması ile ilgili sorulara ait değildir. Bunu bilmen için yeterince uzun zamandır katkıda bulundun. Kendi sorunuza bir cevap vermek isterseniz, kesinlikle memnuniyetle karşılayabilirsiniz . Alternatif olarak, iyileştirmek / genişletmek için sığınak cevabını düzenleyebilirsiniz.
Cody Gray

1
@Cody arada sırada bu gönderiye atıfta bulunuyorum. Metni rastgele rastgele silemezsiniz, bu sadece kriket değildir. Silmek istiyorsanız, kesinlikle kendi cevabınıza geçirebilirsiniz (ve bunun için bazı upvotes bile alabilirsiniz - bunun nasıl çalıştığını bilmek için yeterince uzun zamandır katkıda bulunmuştunuz).
Contango

Yanıtlar:


1281

Teslim günlüğünü (tüm dallarda) verilen metni aramak için:

git log --all --grep='Build 0051'

Bir repo geçmişi boyunca taahhütlerin gerçek içeriğini aramak için şunu kullanın:

git grep 'Build 0051' $(git rev-list --all)

verilen metnin tüm örneklerini, içeren dosya adını ve kaydedilen sha1'i göstermek için.

Son olarak, taahhüdünüzün sarkması ve tarihe hiç bağlı olmaması durumunda son çare olarak, reflogun kendisini -gbayrakla arayabilirsiniz --walk-reflogs:

git log -g --grep='Build 0051'

EDIT: geçmişinizi kaybetmiş gibi görünüyorsa reflog, güvenlik ağı olarak kontrol edin . Tarafından listelenen taahhütlerden birinde Build 0051'i arayın

git reflog

HEADTarihinizi 'Build 0051' taahhüdünün görünmediği bir kısmına ayarlamış olabilirsiniz veya gerçekten uçurmuş olabilirsiniz. Git-hazır reflog makale yardımcı olabilir.

Taahhüdünüzü reflog'dan kurtarmak için : bulduğunuz taahhüdün bir kontrolünü yapın (ve isteğe bağlı olarak referans için yeni bir şube veya etiketi yapın)

git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
# alternative, using reflog (see git-ready link provided)
# git checkout HEAD@{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip

2
git grep ile 'Build 0051' $ (git rev-list --all) Ben sh.exe alıyorum ": / bin / git: Kötü dosya numarası belki bu değişti yapmanın yolu var?
Jens Schauder

7
git log -i -grep
jhvaras

@JensSchauder Bir hatayla karşılaşırsanız git grep 'search' $(git rev-list --all), deneyingit rev-list --all | xargs git grep 'search'
afilina

83

Bunu ~ / .gitconfig dosyama koydum:

[alias]
    find = log --pretty=\"format:%Cgreen%H %Cblue%s\" --name-status --grep

Sonra "git find string" yazabilirim ve mesajda bu dizeyi içeren tüm taahhütlerin bir listesini alırım. Örneğin, 33 numaralı bileti referans alan tüm taahhütleri bulmak için:

029a641667d6d92e16deccae7ebdeef792d8336b Added isAttachmentEditable() and isAttachmentViewable() methods. (references #33)
M       library/Dbs/Db/Row/Login.php

a1bccdcd29ed29573d2fb799e2a564b5419af2e2 Add permissions checks for attachments of custom strategies. (references #33).
M       application/controllers/AttachmentController.php

38c8db557e5ec0963a7292aef0220ad1088f518d Fix permissions. (references #33)
M       application/views/scripts/attachment/_row.phtml

041db110859e7259caeffd3fed7a3d7b18a3d564 Fix permissions. (references #33)
M       application/views/scripts/attachment/index.phtml

388df3b4faae50f8a8d8beb85750dd0aa67736ed Added getStrategy() method. (references #33)
M       library/Dbs/Db/Row/Attachment.php

1
Güzel, ama belki de bir renk sıfırlaması mı eksik? --pretty=\"format:%Cgreen%H %Cblue%s%Creset\"
Ashley Coolman

4
Ben ile sona erdi böylece, (grep değil başlığında, orada ne olabilir) tam git mesajı yazdırmak için tercih: find = log --all --pretty=\"format:%Cgreen%H %Cblue%s\n%b%Creset\" --name-status --grep. --allVe %bkarakterlerini not edin . Bahşiş için Thx @AshleyCoolman reset.
arcol

Teşekkürler. Takma adı çok kullanışlı buldum. Renklendirmeyi sevmedim ve oneline formatını bunun için mükemmel buldum. Ayrıca büyük / küçük harf duyarsız hale getirmek için -i eklemek yardımcı oldu. ör.find = log --oneline --name-status -i --grep
robbp

39

Biraz geç olsa :/da, kesinleştirme mesajına dayalı bir kesinleştirme (veya düzeltme) belirtmek için ayrılmış gösterim vardır, sadece arama dizesinin önüne ön ek uygulayın :/, örn:

git show :/message

İşte <message>beyaz alanlara oluşan bir kompleks regex deseni olabilir, bu nedenle emin kaçış / alıntı olun gerektiğinde örneğin:

git log -1 -p ":/a few words"

Alternatif olarak, belirli bir noktadan ulaşılabilecek en yakın işi bulmak için bir başlangıç ​​noktası belirtilebilir, örn:

git show 'HEAD^{/fix nasty bug}'

Bakınız: git revizyon kılavuzu .


23
git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).

19
git log --grep="Build 0051"

hile yapmalı


1
. Çift tırnak ( ") yerine tek tırnak ( ') kullanmak zorunda
Frage

9

Bunu dene!

git log | grep -b3 "Build 0051"

Teşekkürler - ama onu bulamıyor. Olası tüm şubelerde nasıl arama yaparım?
Contango

6
git grepNormal grep yerine kullanmak ve --allbirden çok dalı aramak için bayrağı sağlamak istiyorsunuz .
shelhamer

Hmm - diğer cevaplar da bu mu? Değilse, daha büyük bir sorununuz olabilir. Ben denemek istiyorum git log --all --grep='Build 0051'(Shelhamer cevabı @)
Nic

"Git log --all" komutunu denedim ve yalnızca 0046 sürümlerini listeledi. 0051 sürümü farklı bir daldaydı. 0043'e geri döndüm ve 0051 kayboldu.
Contango

3
@Gravitas, reflog kullanan örneğimi deneyin: ile git log -g. Bir sıfırlamada geçmişinizi kaybetmiş olabilirsiniz, ancak çöp toplanmamışsa reflog'u kontrol edebilirsiniz.
shelhamer

4

Taahhüdün SHA'sını git log --onelinebulmak için ilk kullanımı (Mesaj), sonra git log --stat 8zad24ddoğru bilgileri bulmak için SHA (ilk çiftler sha char örneği (8zad24d)) ile kullandım


1

Bu:

git log --oneline --grep='Searched phrase'

veya bu:

git log --oneline --name-status --grep='Searched phrase'

komutlar benim için en iyi sonucu verir.


1

Tüm şubelerde arama yapmak için

git log --all --grep='Build 0051'

Hangi taahhüdü almak istediğinizi öğrendikten sonra

git checkout <the commit hash>

1

Değişiklik çok eski değilse, yapabilirsiniz,

git reflog

ve sonra taahhüt kimliğini kontrol edin

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.