গিট ইতিহাসে প্রতিশ্রুতিবদ্ধ কোডটি কীভাবে গ্রেপ (অনুসন্ধান) করা যায়


1431

আমি অতীতে কিছু সময় কোনও ফাইলের মধ্যে একটি ফাইল বা কিছু কোড মুছে ফেলেছি। আমি কি সামগ্রীতে গ্রেপ করতে পারি (প্রতিশ্রুতি বার্তায় নেই)?

খুব দুর্বল সমাধান হ'ল লগতে গ্রেপ করা:

git log -p | grep <pattern>

তবে এটি সরাসরি প্রতিশ্রুতিবদ্ধ হ্যাশ ফিরিয়ে দেয় না। আমি চারপাশে খেলেছি git grepকোনও লাভ হয়নি।


2
জুনিও সি হামানো (গিট রক্ষণকারী) এর এই ব্লগ পোস্টগুলি আপনার জন্য আকর্ষণীয় হতে পারে: * লিনাসের চূড়ান্ত সামগ্রী ট্র্যাকিং সরঞ্জাম (পিকেক্স অনুসন্ধান git log -Sএবং দোষ সম্পর্কে ) * ["গিট লগ --গ্রিপ" দিয়ে মজা করা] [২] (প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতি সন্ধান করা) ) * ["গিট গ্রেপ " এর সাথে মজা করুন] [3] [2]: gitster.livejorter.com/30195.html [3]: gitster.livejorter.com/27674.html
জাকুব


সম্ভাব্য সদৃশ থেকে উত্তরটি আসলে কাজ করে: stackoverflow.com/a/1340245/492
সিএডি

এর সাথে ইস্যুটি হ'ল এটি পরিবর্তনের কোনও প্রসঙ্গ দেয় না ... অর্থাৎ কে / কখন
সোনিক সোল

উত্তর:


1887

প্রতিশ্রুতিবদ্ধ সামগ্রী (যেমন, উত্সের প্রকৃত রেখাগুলি, বার্তাগুলি এবং এই জাতীয় প্রতিশ্রুতিগুলির বিপরীতে) অনুসন্ধান করার জন্য আপনাকে যা করতে হবে:

git grep <regexp> $(git rev-list --all)

git rev-list --all | xargs git grep <expression> আপনি যদি "একটি তর্ক তালিকায় খুব দীর্ঘ" ত্রুটি চালান তবে কাজ করবে।

আপনি যদি কিছু সাবট্রিতে অনুসন্ধানের সীমাবদ্ধ করতে চান (উদাহরণস্বরূপ, "lib / ইউজার"), আপনাকে এটি rev-listসাবকম্যান্ডেও প্রেরণ করতে হবে grep:

git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util

এটি আপনার সমস্ত প্রতিশ্রুত পাঠ্যের জন্য গ্রেপ করবে regexp

উভয় কমান্ডে পাথ পাস করার কারণ হ'ল rev-listসংশোধন তালিকাটি ফিরিয়ে দেবে যেখানে সমস্ত পরিবর্তনগুলি lib/utilঘটেছিল, তবে আপনাকে grepএটির মধ্যেও প্রবেশ করতে হবে যাতে এটি কেবল সন্ধান করে lib/util

কেবলমাত্র নিম্নলিখিত দৃশ্যের কল্পনা করুন: grepএকই <regexp>ফাইলগুলি আবার একই সংশোধনীতে অন্তর্ভুক্ত থাকা অন্য ফাইলগুলিতে একই সন্ধান করতে পারে rev-list(এমনকি সেই সংশোধনীতে সেই ফাইলে কোনও পরিবর্তন হয়নি)।

আপনার উত্স অনুসন্ধানের আরও কয়েকটি দরকারী উপায় এখানে রইল:

নিয়মিত এক্সপ্রেশন regexp এর সাথে মেলে পাঠ্যের জন্য কাজের গাছটি অনুসন্ধান করুন:

git grep <regexp>

নিয়মিত এক্সপ্রেশন regexp1 বা regexp2 এর সাথে মেলে পাঠ্যের লাইনের জন্য কাজের গাছটি অনুসন্ধান করুন:

git grep -e <regexp1> [--or] -e <regexp2>

নিয়মিত এক্সপ্রেশন regexp1 এবং regexp2 এর সাথে মেলে পাঠ্য লাইনের জন্য কার্যকারী গাছ অনুসন্ধান করুন, কেবলমাত্র ফাইল পাথের প্রতিবেদন:

git grep -l -e <regexp1> --and -e <regexp2>

নিয়মিত এক্সপ্রেশন regexp1 এর সাথে মেলে পাঠ্যের রেখাগুলি এবং নিয়মিত অভিব্যক্তি regexp2 এর সাথে মেলে পাঠ্যের লাইন রয়েছে এমন ফাইলগুলির জন্য কার্যকারী গাছ অনুসন্ধান করুন:

git grep -l --all-match -e <regexp1> -e <regexp2>

পাঠ্য মিলের প্যাটার্নের পরিবর্তিত রেখাগুলির জন্য কার্যকারী বৃক্ষ অনুসন্ধান করুন:

git diff --unified=0 | grep <pattern>

নিয়মিত এক্সপ্রেশন regexp এর সাথে মেলে পাঠ্যের জন্য সমস্ত সংশোধনগুলি অনুসন্ধান করুন:

git grep <regexp> $(git rev-list --all)

নিয়মিত এক্সপ্রেশন রেজিএক্সপ্যাক্সের সাথে টেক্সটের সাথে মেলে রেভার 1 এবং রেভ 2 এর মধ্যে সমস্ত সংশোধন অনুসন্ধান করুন:

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

61
ধন্যবাদ, দুর্দান্ত কাজ করে! এটি দুঃখজনক হলেও যদিও "$ (গিট রেভ-তালিকা - সমস্ত)" প্রয়োজন এবং কোনও শাখার পুরো ইতিহাসে অনুসন্ধান নির্দিষ্ট করার জন্য কোনও সুবিধাজনক সুইচ নেই।
অর্টউইন জেন্টজ

3
চমৎকার। +1 টি। গিটবুক কিছু বিবরণ যুক্ত করে ( book.git-scm.com/4_find_with_git_grep.html ), এবং জুনিও সি হামানো আপনার কয়েকটি পয়েন্ট তুলে ধরে: gitster.livej Journal.com/27674.html
ভোনসি

18
দুর্ভাগ্যক্রমে, আমি এমএসএসজিট-১.7.৪ নিয়ে এটি পেতে পারি না। এটা আমাকে বলে sh.exe": /bin/git: Bad file number। ভনসির উত্তর এমএসএসজিটের সাথেও কাজ করে।
উপস্থাপিত

4
আপনি যখন রেভ-তালিকার সাহায্যে গিট গ্রেপ ইতিহাসের আবেদন করবেন আপনি যদি "গাছ পড়তে অক্ষম" ত্রুটি পান তবে আপনার জিনিসগুলি পরিষ্কার করতে হতে পারে। চেষ্টা করে দেখুন git gcবা দেখুন : স্ট্যাকওভারফ্লো.com
অ্যান্টনি পানোজো

8
হ্যাঁ, উইন্ডোজে এটিও ব্যর্থ হয়েছে বলে মনে হচ্ছে a
mlissner

551

আপনার পিক্যাক্স ( -S) বিকল্পটি ব্যবহার করা উচিত git log

অনুসন্ধান করতে Foo:

git log -SFoo -- path_containing_change
git log -SFoo --since=2009.1.1 --until=2010.1.1 -- path_containing_change

গিট ইতিহাস দেখুন - আরও কিওয়ার্ড দ্বারা হারিয়ে যাওয়া লাইনটি সন্ধান করুন


যেমনটি জাকুব নরবস্কি মন্তব্য করেছেন:

  • এটি এমন পার্থক্যগুলির জন্য অনুসন্ধান করে যা উদাহরণস্বরূপ পরিচয় বা অপসারণ করে<string> । এর অর্থ সাধারণত "সংশোধন যেখানে আপনি 'ফু' দিয়ে লাইন যুক্ত করেছেন বা সরিয়েছেন"।

  • --pickaxe-regexবিকল্পটি বাড়ানো POSIX এর পরিবর্তে একটি স্ট্রিং এর জন্য অনুসন্ধানের Regex ব্যবহারের অনুমতি দেয়। উদাহরণ (থেকে git log):git log -S"frotz\(nitfol" --pickaxe-regex


যেমন রব মন্তব্য করেছেন, এই অনুসন্ধানটি কেস-সংবেদনশীল - তিনি কীভাবে সংবেদন-সংবেদনশীল অনুসন্ধান করবেন সে সম্পর্কে একটি ফলোআপ প্রশ্ন খুললেন ।


3
ধন্যবাদ, আমি এই বিকল্পটি সম্পর্কে অবগত ছিলাম না। মনে হচ্ছে আপনার প্রতিশ্রুতিবদ্ধ বার্তাগুলিতে আগ্রহী যদি জিতের সমাধানটি সবচেয়ে উপযুক্ত হয় তবে আপনার যদি খাঁটি লাইন মিলের traditionalতিহ্যবাহী ইউনিক্স গ্রেপ আচরণ প্রয়োজন।
অর্টউইন জেন্টজ

@ অর্টউইন: সম্মত হয়েছেন (এবং আমি নির্বাচিত সমাধানটিকে সমর্থন করেছি)। git logআপনার প্রশ্নের মধ্যে বিট আমাকে বিভ্রান্ত করেছে;)
VonC

12
পৃথককে -pআউটপুট দেওয়ার জন্য এটি পতাকা সহ একত্রিত করুন ।
স্যান্ডার

গিট লগ-এস ব্যবহার করে কোনও নির্দিষ্ট নিদর্শনগুলির সাথে মেলে সমস্ত ডিরেক্টরিকে বাদ দেওয়ার কোনও উপায় আছে কি?
বাকাকুনা

3
@ অ্যান্ট্রোপিকের জন্য আপনাকে --branches --allসমস্ত রেপো অনুসন্ধান করার জন্য বিকল্পগুলির প্রয়োজন হবে।
ভনসি

249

এটা করতে আমার প্রিয় উপায় সাথে আছেন git log'র -Gবিকল্প (সংস্করণ 1.7.4 যোগ)।

-G<regex>
       Look for differences whose added or removed line matches the given <regex>.

কমিটের সাথে মেলে কিনা -Gএবং -Sবিকল্পগুলি যেভাবে নির্ধারণ করে তার মধ্যে একটি সূক্ষ্ম পার্থক্য রয়েছে :

  • -Sবিকল্প মূলত আগে ও একটি কমিট পরে একটি ফাইলে বার আপনার সন্ধানের সাথে মেলে সংখ্যা গণনা করে। পূর্বে এবং পরে গণনাগুলি পৃথক হলে কমিটটি লগে দেখানো হয়। এটি উদাহরণস্বরূপ, যেখানে আপনার সন্ধানের সাথে মেলে একটি লাইন স্থানান্তরিত হয়েছিল সেখানে কমিটগুলি প্রদর্শন করবে না।
  • সঙ্গে -Gবিকল্প, কমিট লগ দেখানো হয় যদি আপনার দ্বারা অনুসন্ধানের সাথে কোন লাইন যে যোগ মুছে, অথবা পরিবর্তন করা হয়েছে সাথে মেলে।

উদাহরণ হিসাবে এই প্রতিশ্রুতি নিন:

diff --git a/test b/test
index dddc242..60a8ba6 100644
--- a/test
+++ b/test
@@ -1 +1 @@
-hello hello
+hello goodbye hello

এই প্রতিশ্রুতিবদ্ধ হওয়ার আগে এবং পরে ফাইলটিতে "হ্যালো" বারের উপস্থিতির সংখ্যা একই কারণ, এটি ব্যবহার করে মিলবে না -Shello। তবে, যেহেতু একটি লাইন মিলের ক্ষেত্রে পরিবর্তন হয়েছিল hello, তাই প্রতিশ্রুতি ব্যবহার করে দেখানো হবে -Ghello


2
গিট লগ আউটপুটে ম্যাচের পরিবর্তনের প্রসঙ্গটি দেখানোর কোনও উপায় আছে কি?
থিলো-আলেকজান্ডার জিনকেল

13
@ থিলো-আলেকজান্ডার জিনকেল - আমি সাধারণত -pপ্রতিটি প্রতিশ্রুতিবদ্ধতার জন্য একটি ভিন্নতা প্রদর্শন করার বিকল্পটি যুক্ত করি । তারপরে যখন আমার পেজারে লগটি খোলা হয়, আমি যা খুশি তা অনুসন্ধান করি। যদি আপনার পেজার হয় lessএবং আপনি git log -Ghello -p, আপনি টাইপ করতে পারেন /hello, টিপতে পারেন Enter, এবং ব্যবহার করতে পারেন nএবং N"হ্যালো" এর পরবর্তী / পূর্ববর্তী ঘটনাগুলি সন্ধান করতে পারেন ।
টাইলার হলিয়েন

আমি -Gএবং রেজেক্সের সাথে একটি আকর্ষণীয় সমস্যা পেয়েছি : যদি কমান্ড লাইনটি ইউটিএফ -8 ব্যবহার করে এবং আপনি যে ফাইলটি সন্ধান করছেন তাতে কিছু আইএসও-ল্যাটিন (8 বিট) এনকোডিং ব্যবহার করা হয়, .*ব্যর্থ হয়। উদাহরণস্বরূপ, আমার একটি পরিবর্তন আছে Vierter Entwurf-> Fünfter Entwurfএবং যখন 'V.*ter Entwurf'একটি মিল উত্পাদন করে 'F.*ter Entwurf'তবে তা হয় না।
মার্কিন উইন্ডেল

51

আপনি যদি কোড পরিবর্তনগুলি ব্রাউজ করতে চান (পুরো ইতিহাসে প্রদত্ত শব্দের সাথে আসলে কী পরিবর্তিত হয়েছে দেখুন) patchমোডে যান - আমি করার একটি খুব দরকারী সমন্বয় পেয়েছি:

git log -p
# Hit '/' for search mode.
# Type in the word you are searching.
# If the first search is not relevant, hit 'n' for next (like in Vim ;) )

11
অ্যাকসেসপটেড সলিউশন আমার পক্ষে গিট লগ-এস কাজ করে না। এই এক করেছে!
রডভ্লোপস

29

git log সমস্ত শাখা জুড়ে পাঠ্য অনুসন্ধানের আরও কার্যকর উপায় হতে পারে, বিশেষত যদি অনেকগুলি মিল থাকে এবং আপনি প্রথমে আরও সাম্প্রতিক (প্রাসঙ্গিক) পরিবর্তনগুলি দেখতে চান।

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

এই লগ কমান্ডের তালিকাটি কমিট করে যা প্রদত্ত অনুসন্ধান স্ট্রিং / রেজেক্স যুক্ত করে বা সরিয়ে দেয় (সাধারণত) প্রথমে আরও সাম্প্রতিক। -pবিকল্প প্রাসঙ্গিক পরিবর্তন, যেখানে প্যাটার্ন যোগ করা হয়েছিল বা মুছে ফেলা দেখানো হবে তা তাই আপনি এটি প্রেক্ষাপটে দেখতে পারেন কারণ।

একটি প্রাসঙ্গিক প্রতিশ্রুতি পাওয়া গেছে যা আপনি যে পাঠ্যটি সন্ধান করছেন তা যুক্ত করে (উদাহরণস্বরূপ, 8beeff00d), সেই শাখাগুলি সন্ধান করুন যা প্রতিশ্রুতিবদ্ধ রয়েছে:

git branch -a --contains 8beeff00d

হাই, এই লাইনগুলি মোটেও কাজ করে না বলে মনে হচ্ছে। আমার কমান্ডটি হল> গিট লগ-পি - সমস্ত-এস'র পাবলিক স্ট্রিং ডিওবি {পেতে; সেট; } = স্ট্রিং.এম্পটি; ' এবং যতবারই আমি এটি চালানোর চেষ্টা করি আমি> মারাত্মক: অস্পষ্ট আর্গুমেন্ট 'স্ট্রিং' পেয়ে যাচ্ছি: অজানা সংশোধন বা পথটি কার্যকরী গাছের মধ্যে নেই। > পুনরায় সংশোধন থেকে পাথ পৃথক করতে '-' ব্যবহার করুন:> 'গিট <কম্যান্ড> [<পুনর্বিবেচনা> ...] - [<ফাইল> ...]'
ব্যবহারকারী 216652

@ ব্যবহারকারী216652 কোনও কারণে 'উদ্ধৃতিগুলি আপনার অনুসন্ধান স্ট্রিংকে একক যুক্তি হিসাবে গোষ্ঠীভুক্ত করছে না। পরিবর্তে, 'publicএটি যুক্তিযুক্ত -S, এবং এটি বাকীটিকে পৃথক যুক্তি হিসাবে বিবেচনা করছে। আপনি কোন পরিবেশে চালাচ্ছেন তা আমি নিশ্চিত নই, তবে সমস্যা সমাধানে সহায়তা করার জন্য সেই প্রসঙ্গে প্রয়োজনীয় necessary আপনার গিট কমান্ডটি শেলটিতে কীভাবে প্রেরণ করা হচ্ছে তার সমস্ত প্রসঙ্গে আপনি সমস্যার সমাধানে সহায়তা করার প্রয়োজন হলে একটি পৃথক স্ট্যাকওভারফ্লো প্রশ্ন খোলার পরামর্শ দেব। আমার কাছে মনে হচ্ছে এটি অন্য কোনও কমান্ডের মাধ্যমে পাঠানো হচ্ছে? মন্তব্যগুলি এখানে খুঁজে বের করার জন্য সঠিক জায়গা নয়।
এডওয়ার্ড অ্যান্ডারসন

26

আমি জীটের উত্তর নিয়েছি এবং এটি উইন্ডোজে রূপান্তর করেছি ( এই উত্তরের জন্য ধন্যবাদ ):

FOR /F %x IN ('"git rev-list --all"') DO @git grep <regex> %x > out.txt

মনে রাখবেন যে আমার জন্য, কোনও কারণে, প্রকৃত প্রতিশ্রুতি যা এই রেজেক্সকে মুছে ফেলেছিল তা কমান্ডের আউটপুটে উপস্থিত হয়নি, বরং এর আগে একটি প্রতিশ্রুতিবদ্ধ।


2
+1 - এবং যদি আপনি প্রতিটি অনুসন্ধানের পরে "q" --no-pager
টিপুনকে

2
এছাড়াও, আমি নোট করব যে কোনও পাঠ্য ফাইলে সংযোজন করা আসলে মিলের পাঠ্যটি প্রদর্শন করার অতিরিক্ত সুবিধা রয়েছে। ( >>results.txtউইন্ডোজ
পাইপিংয়ে

1
এবং আমি ভাবলাম
বাশের

23

যে কোনও সংশোধন, যে কোনও ফাইল অনুসন্ধান করুন :

git rev-list --all | xargs git grep <regexp>

কেবলমাত্র প্রদত্ত কয়েকটি ফাইলে অনুসন্ধান করুন, উদাহরণস্বরূপ এক্সএমএল ফাইলগুলি:

git rev-list --all | xargs -I{} git grep <regexp> {} -- "*.xml"

ফলাফলের রেখাগুলি এর মতো দেখতে পাওয়া উচিত: 6988bec26b1503d45eb0b2e8a4364afb87dde7af: bla.xml: এটি যে লাইনের সন্ধান পেয়েছে তা ...

তারপরে আপনি লেখক, তারিখ এবং ডিফ ব্যবহারের মতো আরও তথ্য পেতে পারেন git show:

git show 6988bec26b1503d45eb0b2e8a4364afb87dde7af

11

সরলতার জন্য, আমি গুই ব্যবহার করার সুপারিশ করছি: gitk - দ্য গীত সংগ্রহস্থলের ব্রাউজার । এটি বেশ নমনীয়

  1. কোড অনুসন্ধান করতে:

    এখানে চিত্র বিবরণ লিখুন
  2. ফাইলগুলি অনুসন্ধান করতে:

    এখানে চিত্র বিবরণ লিখুন
  3. অবশ্যই এটি নিয়মিত প্রকাশকে সমর্থন করে:

    এখানে চিত্র বিবরণ লিখুন

এবং আপনি উপরের / নীচে তীরগুলি ব্যবহার করে ফলাফলগুলি নেভিগেট করতে পারেন।


6

সোর্সট্রি- তে অন্য যে কেউ এটি করার চেষ্টা করছেন , তার জন্য ইউআই-তে সরাসরি কমান্ড নেই (সংস্করণ 1.6.21.0 হিসাবে)। তবে, আপনি টার্মিনাল উইন্ডোটি (মূল সরঞ্জামদণ্ডে উপলব্ধ বোতাম) খোলার মাধ্যমে সেগুলিতে অনুলিপি / আটকানোর মাধ্যমে স্বীকৃত উত্তরে বর্ণিত নির্দিষ্ট আদেশগুলি ব্যবহার করতে পারেন ।

দ্রষ্টব্য: সোর্সট্রি এর অনুসন্ধান দর্শন আংশিকভাবে আপনার জন্য পাঠ্য অনুসন্ধান করতে পারে। অনুসন্ধান দৃশ্যে যেতে Ctrl+ টিপুন 3(বা নীচে উপলব্ধ অনুসন্ধান ট্যাবটি ক্লিক করুন)। ডানদিক থেকে অনুসন্ধানের ধরণটি ফাইল পরিবর্তনগুলিতে সেট করুন এবং তারপরে আপনি অনুসন্ধান করতে চান এমন স্ট্রিং টাইপ করুন। উপরোক্ত কমান্ডের তুলনায় এই পদ্ধতিতে নিম্নলিখিত সীমাবদ্ধতা রয়েছে:

  1. Sourcetree শুধুমাত্র দেখায় করে পরিবর্তন ফাইলগুলির একটি ক্ষেত্রে অনুসন্ধানের শব্দ ধারণ করে। সন্ধানের পাঠ্য থাকা সঠিক ফাইলটি সন্ধান করা আবার একটি ম্যানুয়াল কাজ।
  2. RegEx সমর্থিত নয়।

4

যখনই আমি নিজেকে আপনার জায়গায় খুঁজে পাই, আমি নিম্নলিখিত কমান্ড লাইনটি ব্যবহার করি:

git log -S "<words/phrases i am trying to find>" --all --oneline  --graph

ব্যাখ্যা:

  1. git log- আমি এখানে আরও লেখার প্রয়োজন; এটি কালানুক্রমিক ক্রমে লগগুলি দেখায়।
  2. -S "<words/phrases i am trying to find>" - এটি সমস্ত গিটের প্রতিশ্রুতি দেখায় যেখানে কোনও ফাইল (যুক্ত / সংশোধিত / মোছা) শব্দগুলি / বাক্যাংশ রয়েছে যা '<>' চিহ্ন চিহ্ন ছাড়া সন্ধান করার চেষ্টা করছি।
  3. --all - সমস্ত শাখা জুড়ে প্রয়োগ এবং অনুসন্ধান করা।
  4. --oneline - এটি এক লাইনে গিট লগকে সংকুচিত করে।
  5. --graph - এটি কালানুক্রমিকভাবে আদেশিত কমিটের গ্রাফ তৈরি করে।

1
"যখনই আমি নিজেকে আপনার জায়গায় খুঁজে পাই, আমি গিট ব্যবহার করার প্রয়োজন বোধ করি!"
সেবি

1
এটি একটি দুর্দান্ত উত্তর!
আলফ ইটন

আমার পছন্দ
surajs1n

2

জিতের উত্তর পাওয়ারশলে কাজ করে।

git grep -n <regex> $(git rev-list --all)

নিম্নলিখিতটিতে সমস্ত ফাইল প্রদর্শন করে, যে কোনও প্রতিশ্রুতিতে ক password

# Store intermediate result
$result = git grep -n "password" $(git rev-list --all)

# Display unique file names
$result | select -unique { $_ -replace "(^.*?:)|(:.*)", "" }

1

সুতরাং আপনি কোডটির পুরানো সংস্করণগুলি গ্রেপ করার চেষ্টা করছেন যা সর্বশেষে কিছু উপস্থিত রয়েছে তা সন্ধান করছেন?

আমি যদি এটি করছিলাম তবে আমি সম্ভবত গিট বাইসেক্ট ব্যবহার করব । দ্বিখণ্ডিত ব্যবহার করে, আপনি একটি পরিচিত ভাল সংস্করণ, একটি পরিচিত খারাপ সংস্করণ এবং একটি সাধারণ স্ক্রিপ্ট উল্লেখ করতে পারেন যা সংস্করণটি ভাল বা খারাপ কিনা তা পরীক্ষা করতে পারে (এই ক্ষেত্রে আপনি যে কোডটি সন্ধান করছেন সেটি উপস্থিত রয়েছে কিনা তা দেখার জন্য একটি গ্রেপ )। কোডটি সরিয়ে ফেলা হলে এটি চালিয়ে যাবে।


2
হ্যাঁ, তবে আপনার "পরীক্ষা" একটি স্ক্রিপ্ট হতে পারে যা কোডটির জন্য গ্রেপ হয় এবং কোডটি উপস্থিত থাকলে "সত্য" এবং যদি তা না থাকে তবে "মিথ্যা" ফেরত দেয়।
রব ডি মার্কো

2
ঠিক আছে, কোডটি যদি রিভিশন 10 এ খারাপ হয়, 11 টি রিভিশনে ভাল হয়ে উঠুন এবং পুনর্বিবেচনা 15 তে আবার খারাপ হয়ে যান ...
পাওলো

2
আমি পাওলো এর সাথে একমত বাইনারি অনুসন্ধান কেবলমাত্র "অর্ডার করা" মানের জন্য উপযুক্ত। গিট বিসেক্টের ক্ষেত্রে, এর অর্থ রেফারেন্স পয়েন্ট থেকে শুরু করে সমস্ত "খারাপ" সংশোধনীর আগে সমস্ত "ভাল" সংশোধনী আসে, তবে ট্রানজিটরি কোডটি সন্ধান করার সময় এই ধারণা করা যায় না। এই সমাধানটি কিছু ক্ষেত্রে কার্যকর হতে পারে তবে এটি কোনও সাধারণ উদ্দেশ্য সমাধান নয়।
ক্যান্ট

আমি মনে করি এটি অত্যন্ত অকার্যকর কারণ পুরো গাছটিকে দ্বিখণ্ডিত করার জন্য একাধিকবার পরীক্ষা করা হয়।
মার্কিন উইন্ডেল

0

পরিস্থিতি: আপনি আপনার আইডিই ব্যবহার করে আপনার কোডটি বেশ বড় করেছেন। সমস্যা: IDE এর চেয়ে বেশি পরিষ্কার করেছে এবং এখন আপনার কোডটি সংকলন করে না (নিখোঁজ সংস্থানসমূহ)

সমাধান:

git grep --cached "text_to_find"

এটি সেই ফাইলটি খুঁজে পাবে যেখানে "টেক্সট_ টু ফাইন্ড" পরিবর্তন করা হয়েছিল।

আপনি এখন এই পরিবর্তনটিকে পূর্বাবস্থায় ফেরাতে পারেন এবং আপনার কোডটি সংকলন করতে পারেন।


0
git rev-list --all | xargs -n 5 git grep EXPRESSION

জীতের সমাধানের জন্য একটি ঝলক , সুতরাং এটি অনুসন্ধানের সময় ফলাফলগুলি দেখায় এবং কেবল শেষের দিকে নয় (যা একটি বৃহত সংগ্রহস্থানে দীর্ঘ সময় নিতে পারে)।


-1

আমার ক্ষেত্রে আমার একটি সংক্ষিপ্ত প্রতিশ্রুতি অনুসন্ধান করা দরকার এবং তালিকাভুক্ত সমাধানগুলি দুর্ভাগ্যক্রমে কাজ করছে না।

আমি এটি দিয়ে পরিচালনা করেছিলাম ( REGEX টোকেন প্রতিস্থাপন করুন ):

for commit in $(git rev-list --all --abbrev-commit)
do
    if [[ $commit =~ __REGEX__ ]]; then 
        git --no-pager show -s --format='%h %an - %s' $commit
    fi
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.