मैसेज द्वारा Git रिपॉजिटरी कैसे खोजें?


828

मैंने जीआईटी में कुछ स्रोत कोड को "संदेश 0051 बनाएँ" संदेश के साथ जांचा।

हालाँकि, मुझे लगता है कि स्रोत कोड किसी भी अधिक नहीं मिल सकता है - मैं कमांड लाइन का उपयोग करके जीआईटी रिपॉजिटरी से इस स्रोत को कैसे निकालूं?

अपडेट करें

  1. स्मार्टगिट का उपयोग करके संस्करणों को 0043, 0044, 0045 और 0046 में जांचा गया।
  2. 0043 की जाँच की, और एक भिन्न शाखा पर 0051 तक के संस्करणों में जाँच की।
  3. फिर से 0043 की जाँच की।
  4. अब, 0051 गायब हो गया है।

अपडेट करें

स्रोत कोड निश्चित रूप से है, अब इसकी जाँच करने की बात है:

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>


1
यह भी देखें stackoverflow.com/questions/18122628/...
ripper234


2
स्टैक ओवरफ्लो पर सवालों के जवाब नहीं हैं। आप लंबे समय से योगदानकर्ता रहे हैं कि आपको यह जानना चाहिए। यदि आप अपने स्वयं के प्रश्न का उत्तर देना चाहते हैं, तो आप निश्चित रूप से इसका स्वागत करते हैं । वैकल्पिक रूप से, आप इसे सुधारने / विस्तारित करने के लिए आश्रयदाता के उत्तर को संपादित कर सकते हैं।
कोड़ी ग्रे

1
@ मैं कभी-कभी इस पद का संदर्भ देता हूं। आप केवल पाठ को बेतरतीब ढंग से हटा नहीं सकते, यह सिर्फ क्रिकेट नहीं है। यदि आप इसे हटाना चाहते हैं, तो आप निश्चित रूप से इसे अपने स्वयं के उत्तर में स्थानांतरित करने के लिए स्वागत कर रहे हैं (और आपको इसके लिए कुछ अपवोट भी मिल सकते हैं - आप यह जानने के लिए लंबे समय से योगदानकर्ता हैं कि यह कैसे काम करता है)।
कंटैंगो

जवाबों:


1280

दिए गए पाठ के लिए प्रतिबद्ध लॉग (सभी शाखाओं में) की खोज करने के लिए:

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

रेपो के इतिहास के माध्यम से आने वाली वास्तविक सामग्री को खोजने के लिए, उपयोग करें:

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

दिए गए पाठ के सभी उदाहरणों को दिखाने के लिए, फ़ाइल का नाम और प्रतिबद्ध sha1।

अंत में, अंतिम उपाय के रूप में, यदि आपकी प्रतिबद्धता लटक रही है और इतिहास से बिल्कुल भी जुड़ी नहीं है, तो आप -gझंडे के साथ स्वयं को खोज सकते हैं (इसके लिए छोटा --walk-reflogs:

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

संपादित करें: यदि आप अपना इतिहास खो चुके हैं, तो reflogअपने सुरक्षा जाल की जाँच करें । द्वारा सूचीबद्ध कमिट्स में से एक में बिल्ड 0051 की तलाश करें

git reflog

हो सकता है कि आपने अपने HEADइतिहास के एक हिस्से में बस सेट किया हो , जिसमें 'बिल्ड 0051' कमिट दिखाई नहीं दे रहा है, या आप वास्तव में उसे उड़ा सकते हैं। Git के लिए तैयार reflog लेख मदद की हो सकती है।

अपनी कमेटी को रिफ्लॉग से उबरने के लिए : आपके द्वारा पाया गया कमिट का एक चेकआउट करें (और वैकल्पिक रूप से संदर्भ के लिए एक नई शाखा या टैग बनाएं)

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 'बिल्ड 0051' $ (git Rev-list --all) के साथ मुझे sh.exe मिलता है ": / bin / git: खराब फ़ाइल संख्या में ऐसा करने का तरीका बदल सकता है?
Jens Schauder

7
git log -i -grep
jhvaras

@JensSchauder यदि आप किसी त्रुटि में भाग लेते हैं git grep 'search' $(git rev-list --all), तो कोशिश करेंgit rev-list --all | xargs git grep 'search'
afilina

83

मैंने इसे अपने ~ / .itconfig में डाला:

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

फिर मैं "git find string" टाइप कर सकता हूं और मुझे संदेश में उस स्ट्रिंग वाले सभी कमिट की एक सूची मिलती है। उदाहरण के लिए, सभी संदर्भित टिकटों को खोजने के लिए टिकट # 33:

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
अच्छा है, लेकिन शायद एक रंग रीसेट याद आ रही है? --pretty=\"format:%Cgreen%H %Cblue%s%Creset\"
एशले कूलमैन

4
मैं पूरा git संदेश प्रिंट करना पसंद करता हूं (grep वहां हो सकता है, शीर्षक में नहीं), इसलिए मैंने साथ समाप्त किया find = log --all --pretty=\"format:%Cgreen%H %Cblue%s\n%b%Creset\" --name-status --grep:। नोट --allऔर %bचार्ट। resetटिप के लिए Thx @AshleyCoolman ।
arcol

धन्यवाद। मुझे उपनाम बहुत उपयोगी लगा। मुझे रंग पसंद नहीं आया और मैंने इसके लिए ऑनलाइन प्रारूप को सही पाया। इसके अलावा -i इसे केस-असंवेदनशील बनाने में सहायक था। उदाहरणfind = log --oneline --name-status -i --grep
लुटेरा

39

हालांकि थोड़ी देर, :/कमिट मैसेज के आधार पर कमिट (या रिवीजन) निर्दिष्ट करने के लिए समर्पित नोटेशन है, बस खोज स्ट्रिंग को उपसर्ग के साथ :/, उदाहरण के लिए:

git show :/message

यहां <message>व्हॉट्सएप से मिलकर एक जटिल रेगेक्स पैटर्न हो सकता है, इसलिए कृपया आवश्यक होने पर उद्धरण / बचना सुनिश्चित करें, जैसे:

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

वैकल्पिक रूप से, एक प्रारंभिक बिंदु निर्दिष्ट किया जा सकता है, एक विशिष्ट बिंदु से पहुंच के लिए निकटतम प्रतिबद्ध खोजने के लिए, उदाहरण के लिए:

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

देखें: git संशोधन मैनुअल


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


9

इसे इस्तेमाल करे!

git log | grep -b3 "Build 0051"

धन्यवाद - लेकिन यह नहीं मिल रहा है। मैं सभी संभावित शाखाओं में कैसे खोज कर सकता हूं?
कंटैंगो

6
आप git grepसामान्य grep के बजाय उपयोग करना चाहते हैं , और --allकई शाखाओं को खोजने के लिए ध्वज प्रदान करते हैं।
शेल्हेर

हम्म - क्या अन्य उत्तर इसे ढूंढ रहे हैं? यदि नहीं, तो आप एक बड़ी समस्या हो सकती है। मैं कोशिश करूँगा git log --all --grep='Build 0051'(@ शेल्हामर का जवाब)
निक

मैंने "गिट लॉग --all" की कोशिश की, और यह केवल संस्करणों को 0046 में सूचीबद्ध करता है। संस्करण 0051 एक अलग शाखा पर था। मैं 0043 पर वापस लुढ़का, और 0051 गायब हो गया।
कंटैंगो

3
@ ग्रेविटास, मेरे उदाहरण का प्रयास करें जो रिफ्लॉग का उपयोग करता है: एक के साथ git log -g। आपने एक रीसेट में इतिहास खो दिया है, लेकिन आप अभी भी रिफ्लॉग की जांच कर सकते हैं यदि यह कचरा एकत्र नहीं किया गया है।
आश्रम

4

पहले git log --onelineकमिट का SHA (संदेश) खोजने के लिए उपयोग करें, फिर मैंने git log --stat 8zad24dसही जानकारी खोजने के लिए SHA (पहले जोड़े sha char example (8zad24d)) का उपयोग किया


1

इस:

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

या यह:

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

कमांड मेरे लिए सबसे अच्छा काम करते हैं।


1

सभी शाखाओं में खोज करने के लिए

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

एक बार जब आप यह जान लेते हैं कि आप कौन सा कमिटमेंट प्राप्त करना चाहते हैं

git checkout <the commit hash>

1

यदि परिवर्तन बहुत पुराना नहीं है, तो आप कर सकते हैं,

git reflog

और फिर कमिट आईडी की जाँच करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.