একক ফাইলের ইতিহাসে স্ট্রিংয়ের জন্য গিট অনুসন্ধান


172

সুতরাং আমার কাছে যদি foo.rb নামে একটি ফাইল থাকে এবং এটি আমার কাছে বার নামক একটি অনুপস্থিত পদ্ধতির জন্য একটি ত্রুটি দিচ্ছে , তাই আমি স্ট্রিংটির জন্য foo.rb এর ইতিহাস অনুসন্ধান করতে চাই barযে এটি আগে কখনও সংজ্ঞায়িত হয়েছিল কিনা।

আমি এই স্ট্রিংয়ের জন্য গিট ইতিহাসের সমস্ত অনুসন্ধানটি পেয়েছি ?

তবে এটি সমস্ত ফাইল অনুসন্ধান করে। আমি কেবল একটি ফাইলে অনুসন্ধান করতে চাই।


6
একটি এফওয়াইআই হিসাবে, আপনি -- filenameযদি এটি কোনও ফাইলে সীমাবদ্ধ রাখতে চান তবে গিট কমান্ডগুলির একটি গোছায় যোগ করতে পারেন।
কার্ল বিলেফেল্ট

উত্তর:


234

এই উদ্দেশ্যে আপনি লগকে গিট করার জন্য -S বিকল্পটি ব্যবহার করতে পারেন:

git log -S'bar' -- foo.rb

39
বা git log -G'bar' -- foo.rb'বার' এর উপস্থিতিগুলির সংখ্যা পরিবর্তিত করার পরিবর্তে 'বার' সম্বলিত ডিফের অনুসন্ধান করতে হবে (গিট-লগ ম্যানপেজ দেখুন)।
জাকুব নরবস্কি

1
উক্তিটি নিয়ে এটি আমার পক্ষে কাজ করে না, বারটি-Sbar অনুসন্ধান করার জন্য আমাকে এটি ব্যবহার করতে হয়েছিল । উইন্ডোজ কমান্ড লাইনটি ব্যবহার করে আমার সাথে এটির কিছু করার থাকতে পারে।
zbr

অন্য কথায়, -G... একটি Regex অনুসন্ধান জন্য এই একটি মহান রেফারেন্স খুব: stackoverflow.com/a/4472267/2586761
ptim

17

অথবা হতে পারে আপনি এটি ব্যবহার করে দেখতে পারেন (সম্পর্কিত প্রশ্ন থেকে স্ট্রিংয়ের জন্য সমস্ত গিট ইতিহাস অনুসন্ধান করুন )

git rev-list --all foo.rb | (
    while read revision; do
        git grep -F 'bar' $revision foo.rb
    done
)

এটি প্রকৃতপক্ষে ফাইলের সামগ্রী অনুসন্ধান করবে এবং বারের যে কোনও ঘটনার জন্য বার্তা / প্যাচগুলি প্রতিশ্রুতিবদ্ধ করবে না।


উইন্ডোগুলির জন্য: for /F %i in ('git rev-list --all foo.rb') git grep -F bar %i foo.rb(ফাইলের নাম বা অনুসন্ধান বাক্যাংশের ফাঁক থাকলে ডাবল-কোটের জন্য দেখুন)
বিস্কুট 314

1
উইন্ডোজে আমার জন্য এটি " for /F %i in ('git rev-list --all foo.rb') do git grep -F bar %i foo.rb
ডু

2

গিট লগ কমান্ডের জন্য একটি ওভাররাইড রয়েছে ( ম্যানুয়াল থেকে ):

$ git log Makefile      # commits that modify Makefile

সুতরাং আপনি ব্যবহার করতে পারেন:

git log foo.rb | grep "bar"

2
ধন্যবাদ, তবে এটি কেবল প্রতিবেদনের ইতিহাস অনুসন্ধান করে, ফাইলের উত্সের ইতিহাস নয়।
জেডি আইজ্যাকস

2
স্ট্রিং ডেটা পরিবর্তনের জন্য অনুসন্ধান করে এমন আরও একটি ওভাররাইড রয়েছে: গিট লগ-এসফু () '# কমিট করে যে' foo () 'স্ট্রিংয়ের সাথে মেলে এমন কোনও ফাইল ডেটা যুক্ত বা সরিয়ে দেয়
দিমিত্রি রেজনিক

1
আপনি - সম্পূর্ণ-পৃথক পরামিতি ব্যবহার করে দেখতে পারেন। লগগুলি কেবল কমিটের ইতিহাস দেখায় না, তবে ভিন্নতাগুলিও প্রদর্শন করে।
দিমিত্রি রেজনিক

@ দিমিত্রি রেজনিক - আপাতদৃষ্টিতে --full-diffকাজ করে না (যেমন কোনও ডিফ দেখানো হয় না) -p, কমপক্ষে গিট ১.7.৯.৫ এ
sauau

0

আমি ব্যবহার করেছি git log -S "string" --follow -p "path of file"যা সেই স্ট্রিং সহ সমস্ত পরিবর্তনের পুরো ইতিহাস দেখায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.