একটি নির্দিষ্ট ফাইল পরিবর্তিত সমস্ত কমিটের তালিকা আমি কীভাবে করব?


798

একটি নির্দিষ্ট ফাইল পরিবর্তন করে এমন সমস্ত কমিটের তালিকা দেওয়ার কোনও উপায় আছে কি?


1
আপনি কি একটি একক শাখা জুড়ে কোনও ফাইলের পরিবর্তনগুলি সন্ধান করছেন; সমস্ত স্থানীয় শাখা জুড়ে; একক রিমোটে সমস্ত শাখা জুড়ে; না সব জুড়ে? আমি মনে করি এটি জুড়ে সমস্ত একটি স্ক্রিপ্ট প্রয়োজন হবে।
benhorgen

উত্তর:


1076

--followএকটি নির্দিষ্ট ফাইলের জন্য কাজ

git log --follow -- filename

প্রদত্ত অন্যান্য সমাধানগুলির মধ্যে পার্থক্য

নোট করুন যে অন্যান্য সমাধানগুলি অন্তর্ভুক্ত git log path(ছাড়া --follow)। এই ডিরেক্টরিটি কার্যকর যদি আপনি কোনও ডিরেক্টরিতে যেমন উদাহরণ পরিবর্তনগুলি ট্র্যাক করতে চান তবে ফাইলগুলির নাম পরিবর্তন করা হলে হোঁচট খায় (এভাবে ব্যবহার করুন --follow filename)।


31
+1 নাম পরিবর্তনের --followজন্য অ্যাকাউন্টস, তাই এটি এর চেয়ে বেশি শক্তিশালীgit log -- path
গ্যাবে মোথার্ট

41
নোট করুন যে --followকোনও পথ গ্রহণ করে , যা একটি ফাইল হতে পারে তবে একটি ডিরেক্টরিও হতে পারে। পরবর্তী ক্ষেত্রে এটি পুনরাবৃত্তভাবে চলবে এবং এই পয়েন্টের নীচে সমস্ত ফাইলের পরিবর্তনের প্রতিবেদন করবে। (এই আচরণটি
ম্যানপেজে

5
যে এক এবং ঠিক মধ্যে পার্থক্যgit log filename?
ভ্যাটো

8
@SaulOrtega, git log filenameফাইল পুনঃনামকরনের অনুসরণ না, IE এটা যে সংক্রান্ত সব করে দেখাতে হবে ফাইলের নাম (প্রকৃত না ফাইল)। যদি আপনি ফাইলগুলি তৈরি করেন Xএবং Yউভয়ই পরিবর্তন করেন তবে মুছে ফেলা হয়েছে Yএবং এর নাম পরিবর্তন করা Xহয়েছে Yএবং এরপরে এটি পরিবর্তনও হয়েছে এবং আপনি চালনা করেন git log Y, আপনি পুরানো Y এবং নতুন উভয়ের জন্য বার্তা পাবেন । বিপরীত সঙ্গে --followআপনি যে ফাইলটি সম্বন্ধে যখন এটি নামে নামকরণ করা হয় করে পাবেন X এবং যখন এটি নামে নামকরণ করা হয় Y
মারসফট

7
সমস্ত শাখায় সমস্ত কমিট দেখার জন্য "গিট লগ
লেবনিক

122

git log pathআপনি যা চান তা করা উচিত git logলোকটির কাছ থেকে :

[--] <path>…

Show only commits that affect any of the specified paths. To prevent confusion with 
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.

11
যদি ফাইলটির পথ পরিবর্তন হয় তবে কাজ করে না। জ্যাক্রাবিটের উত্তর এই ক্ষেত্রে কাজ করে।
kwahn

1
আপনার যদি কোনও নির্দিষ্ট শাখায়
লগকে

62

আমি এটি ঘনিষ্ঠভাবে দেখছি এবং এই সমস্ত উত্তরগুলি সত্যই আমাকে সমস্ত শাখা জুড়ে সমস্ত প্রতিশ্রুতি দেখায় বলে মনে হচ্ছে না।

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

gitk --all --first-parent --remotes --reflog --author-date-order -- filename

এটি এর সাথেও কাজ করে git log:

git log --all --first-parent --remotes --reflog --author-date-order -- filename

10
এটি যখন কেউ পরিবর্তন করে তার জন্য এটি উপযুক্ত তবে তারা পরিবর্তনগুলি কোথায় নিয়ে গেছে তা ভুলে যায়।
আর্থলেলন

2
খুব দরকারী. স্ট্যাশ
কমিটস

এটি পছন্দসই উত্তর হওয়া উচিত। প্রশ্নটি ছিল সমস্ত প্রতিশ্রুতি সন্ধান করা, এটি করে।
কার্ল ভার্বিয়েস্ট

বিজ্ঞপ্তিতে এর --reflogমধ্যে এমন কমিটগুলি অন্তর্ভুক্ত রয়েছে যা পুনর্বাসিত / সংশোধিত বা অন্যথায় বাতিল করা হয়েছিল। সম্ভবত এটি সুস্পষ্ট হওয়া উচিত, তবে আমি git logএটির সাথে ব্যবহার করার চেষ্টা করেছি এবং কেন আমি আপাতদৃষ্টিতে সদৃশ কমিটগুলি দেখছি তা বোঝার চেষ্টা করছিলাম!
সোরেন জর্নস্ট্যাড

43

একটি নির্দিষ্ট ফাইলের জন্য কমিটগুলি পেতে নীচের কমান্ডটি ব্যবহার করুন:

git log -p filename

8
আমি বুঝতে পারি যে এটি কমিটের একটি তালিকা চেয়েছিল বলে এই প্রশ্নের সঠিক উত্তর দেয় না তবে এটি সোনার এবং আমার ফাইলে চলছে।
zkent

2
বর্তমানে চেক-আউট শাখায় ফাইলটি উপস্থিত না থাকলে এটি কিছুতেই কাজ করবে না। আপনি শাখাটি যুক্ত করতে পারেন git log -p mybranch -- filenameবা কেবল git log --all -- filenameসমস্ত শাখায় দেখতে ব্যবহার করতে পারেন।
সোরেন জর্নস্ট্যাড

37

এটি যেমন সহজ হতে হবে git log <somepath>; ম্যানপেজটি পরীক্ষা করুন ( git-log(1))।

ব্যক্তিগতভাবে আমি ব্যবহার করতে পছন্দ করি git log --stat <path>তাই আমি ফাইলের প্রতিটি প্রতিশ্রুতির প্রভাব দেখতে পারি।


9
অথবা -pআপনি সম্পূর্ণ ভিন্নতা দেখতে চাইলেও, এটি কিছু সংখ্যক লাইন পরিবর্তন করেছে।
ক্যাসকেবেল

সত্য, তবে বেশিরভাগ ফাইলই তাদের জীবনের বিভিন্ন সময় পরিবর্তন করা হয়েছে তা বিবেচনা করেই বেশ গোলমাল। আমি কখনও প্রতি ফাইলকে ছুঁয়েছে এমন প্রতিটি কমিটের সম্পূর্ণ ভিন্নতা দেখতে চাই না। আমি সাধারণত একটি নির্দিষ্ট জিনিস সন্ধান করি, তাই আমি কেবলমাত্র প্রভাবগুলির সাথে একটি লগ পেতে পারি এবং তারপরে git showনির্দিষ্ট কমিটগুলিতে দেখতে যেমন তাদের মত লাগে ।
rfunduk

গিট লগ - স্ট্যাট - ফলো - * .html => প্রতিটি প্রতিশ্রুতিতে ঠিক একটি ফাইল সহ কমিটের আউটপুট তালিকা। খুব সুন্দর!
সেরজিও বেলভস্কিজ

17

বিকল্পভাবে (গিট 1.8.4 সাল থেকে), কেবলমাত্র সমস্ত কমিটগুলি পাওয়া সম্ভব যা কোনও ফাইলের একটি নির্দিষ্ট অংশকে পরিবর্তিত করেছে । আপনি প্রারম্ভিক রেখা এবং শেষ লাইন নম্বরটি পাস করে এটি পেতে পারেন।

ফলস্বরূপ প্রত্যাবর্তিত প্রত্যাশীদের তালিকা যা এই বিশেষ অংশটি পরিবর্তন করে। কমান্ডটি এরকম হয়:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

যেখানে upperLimitহয় start_line_numberএবং lowerLimitহয়ending_line_number

আরও তথ্য - https://www.techpurohit.com/list-some-useful-git-commands


16

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

আপনি নাম / পথের পরিবর্তনগুলি কল্পনা করতে চাইলে এটি আরও ভাল বিকল্প হতে পারে:

git log --follow --name-status -- <path>

তবে আপনি যদি কেবল গুরুত্বপূর্ণ বিষয়গুলি নিয়ে আরও কমপ্যাক্ট তালিকা চান:

git log --follow --name-status --format='%H' -- <path>

অথবা এমনকি

git log --follow --name-only --format='%H' -- <path>

ক্ষতিটি হ'ল --followকেবলমাত্র একটি একক ফাইলের জন্য কাজ করে।


4
--followএকটি একক পথের জন্য কাজ করে যা ডিরেক্টরি হতে পারে। যদি কোনও ডিরেক্টরি পাস করা হয় তবে এটি পুনরাবৃত্তভাবে চলবে এবং এই পয়েন্টের নীচে সমস্ত ফাইলের পরিবর্তনের প্রতিবেদন করবে।
StvnW

10

আপনি যদি পূর্বের প্রতিশ্রুতি ব্যবহারে মোছা কোনও ফাইল - অনুসরণ করার চেষ্টা করছেন

git log --follow -- filename

3
জন্য gitনতুনদের: ব্যবহার git log -p --follow -- filenameপাশাপাশি পরিবর্তন প্রদর্শন করে। এছাড়াও নোট করুন: "ফাইলের নাম" কোনও ফাইল, ডিরেক্টরি বা উপ-মডুল হতে পারে।
টিনো

8

আপনি যদি সমস্ত শাখায় একটি ফাইল পরিবর্তন করে এমন সমস্ত কমিটগুলি দেখতে চান তবে এটি ব্যবহার করুন:

git log --follow --all <filepath>

8

আপনার দ্বারা সব করে সন্ধান করতে চান, filenameএবং না filepath , ব্যবহার:

git log --all -- '*.wmv'

6

যদি আপনি কমিটগুলিতে করা সমস্ত পরিবর্তন দেখতে চান যা কোনও নির্দিষ্ট ফাইল বদলেছে (কেবলমাত্র ফাইলের মধ্যে পরিবর্তনের পরিবর্তে), আপনি পাস করতে পারেন --full-diff:

git log -p --full-diff [branch] -- <path>

বা ছাড়াই[branch]
অ্যানেন্ট্রপিক

1
@ অ্যান্ট্রোপিক বর্গাকার বন্ধনীগুলি যুক্তিটি optionচ্ছিক নির্দেশিত বলে মনে করা হয়েছিল।
কিউবিক

এটি আমার যা প্রয়োজন কেবল তা সম্পূর্ণ পরিবর্তন দেখায়, মার্জ থেকে কিছু পরিবর্তন অন্তর্ভুক্ত।
ThanhLD

5

সমস্ত শাখায় git log --all <filename>কমিটগুলি প্রভাবিত করে দেখার জন্য ব্যবহার করুন <filename>


4
gitk <path_to_filename>

"Gitk" প্যাকেজটি ইতিমধ্যে ইনস্টল করা আছে বলে ধরে নেওয়া হচ্ছে।

যদি এটি ইনস্টল না করা থাকে তবে এটি করুন:

sudo apt-get install gitk

এবং তারপরে উপরের কমান্ডটি ব্যবহার করে দেখুন। এটি লিনাক্সের জন্য ... এটি জিএনআই চাইলে লিনাক্স ব্যবহারকারীদের সহায়তা করতে পারে।


উইন্ডোজ ব্যবহারকারীদের জন্য, নোটটি gitkউইন্ডোজের জন্য গিটের সাথে বান্ডিল রয়েছে।
সোরেন বোর্নস্টাড

2

কেবল কমিট হ্যাশ ব্যবহারের একটি তালিকা পেতে git rev-list

 git rev-list HEAD <filename>

আউটপুট:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

যার অর্থ 5 টি কমিট এই ফাইলটিকে স্পর্শ করেছে। এটি বিপরীত কালানুক্রমিক ক্রম, সুতরাং তালিকার প্রথম প্রতিশ্রুতি b7c4f0d7সবচেয়ে সাম্প্রতিকতম।


1

লিনাক্সে আপনি এর জন্য গিটক ব্যবহার করতে পারেন।

এটি "sudo apt-get get git-gui gitk" ব্যবহার করে ইনস্টল করা যেতে পারে। এটি "gitk <Filename>" দ্বারা একটি নির্দিষ্ট ফাইলের কমিটগুলি দেখতে ব্যবহার করা যেতে পারে।


1
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>

# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>

উল্লেখ

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