কমিট ম্যাসেজের মাধ্যমে গিট সংগ্রহস্থল কীভাবে সন্ধান করবেন?


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>




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 নিবন্ধ সাহায্যের করা যেতে পারে।

আপনার প্রতিশ্রুতি পুনরুদ্ধার থেকে পুনরুদ্ধার করতে: আপনি যে প্রতিশ্রুতিটি পেয়েছেন তার গিট চেকআউট করুন (এবং referenceচ্ছিকভাবে একটি নতুন শাখা বা রেফারেন্সের জন্য এটির ট্যাগ করুন)

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
গিট গ্রেপ সহ 'বিল্ড 0051' $ (গিট রেভ-তালিকা - সমস্ত) আমি sh.exe পেয়েছি ": / বিন / গিট: খারাপ ফাইল নম্বর সম্ভবত এটি করার উপায় আছে?
জেনস স্কাউডার

7
গিট লগ -i -grep
jvvaras

@JensSchauder আপনার সাথে একটি ত্রুটি পাতিত করা git grep 'search' $(git rev-list --all), চেষ্টাgit rev-list --all | xargs git grep 'search'
afilina

83

আমি এটি আমার ~ / .gitconfig- এ রেখেছি:

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

তারপরে আমি "গিট ফাইন্ড স্ট্রিং" টাইপ করতে পারি এবং বার্তায় সেই স্ট্রিংটি ধারণ করে সমস্ত কমিটের একটি তালিকা পাই। উদাহরণস্বরূপ, সমস্ত কমিট রেফারেন্সিং টিকিট সন্ধান করতে # 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
আরকোল

ধন্যবাদ। আমি উপনামটি খুব দরকারী বলে মনে করি। আমি রঙ পছন্দ করি না এবং এর জন্য অনলাইন লাইনে ফর্ম্যাটটি নিখুঁত পেয়েছি। এটিকে কেস-সংবেদনশীল করার জন্য -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সাধারণ গ্রেপের পরিবর্তে ব্যবহার করতে চান এবং --allএকাধিক শাখা অনুসন্ধান করতে পতাকা সরবরাহ করতে পারেন।
শেলহেমার

হুঁ - অন্য উত্তরগুলিও এটির সন্ধান করছে? যদি তা না হয় তবে আপনার আরও বড় সমস্যা হতে পারে। আমি চেষ্টা করব git log --all --grep='Build 0051'(@ শেলহামারের উত্তর)
নিক

আমি "গিট লগ - সমস্ত" চেষ্টা করেছি এবং এটি কেবল 0046-এ সংস্করণগুলি তালিকাভুক্ত করে Version সংস্করণ 0051 একটি ভিন্ন শাখায় ছিল। আমি 0043 এ ফিরে এসেছি এবং 0051 অদৃশ্য হয়ে গেল।
কনটাঙ্গো

3
@ গ্রাভিটাস, আমার উদাহরণটি চেষ্টা করুন যা রিফ্লগ ব্যবহার করে: যার সাথে রয়েছে git log -g। আপনি কোনও রিসেটে ইতিহাস হারিয়ে যেতে পারেন, তবে আবশ্যকতা যদি এটি আবর্জনা সংগ্রহ না করা হয় তবে আপনি এখনও পরীক্ষা করতে পারেন।
শেলহেমার

4

প্রথমে কমিটের এসএইচএ ( git log --onelineবার্তা) সন্ধান git log --stat 8zad24dকরার জন্য ব্যবহার করুন, তারপরে আমি সঠিক তথ্য সন্ধানের জন্য এসএইচএ (প্রথম দম্পতিরা শ চর উদাহরণ (8 আজাদ 24 ডি)) দিয়েছিলাম


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

এবং তারপরে কমিট আইডি চেকআউট করুন

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