এর শেষ পরিবর্তনের বিরুদ্ধে গিট ডিফ ফাইল


236

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

এটি, যদি আমরা জানি:

$ git log --oneline myfile
123abc Fix some stuff
456def Frobble the foos
789dba Initial commit

তারপরে git diff 456def myfileমাইফাইলে সর্বশেষ পরিবর্তনটি দেখায়। এর দ্বারা উত্পাদিত জ্ঞান ছাড়া একই কাজ করা সম্ভব git log; 123abc এ কি পরিবর্তন হয়েছে?


8
আমি git diff HEAD^ <file_path>
asgs

4
@asgs - কী আমি জিজ্ঞাসা ছিল না (- দুটি কারণে HEAD^হয় 123abc, HEAD^^হয় 456def, আর যদি অন্য করে ছিল এই ফাইলটি প্রভাবিত হয়নি তারপর HEAD^তাদের বোঝায়)
Chowlett

আপনি ঠিক বলেছেন, "সর্বশেষ প্রতিশ্রুতি যে এটি পরিবর্তিত হয়েছে" অংশটি মিস করেছেন
জিজ্ঞাসা করেছে

উত্তর:


215

এটি বিদ্যমান, তবে এটি আসলে এর বৈশিষ্ট্য git log:

git log -p [--follow] [-1] <path>

দ্রষ্টব্য যে -pএকক প্রতিশ্রুতি থেকে ইনলাইন পৃথক দেখানোর জন্যও ব্যবহার করা যেতে পারে:

git log -p -1 <commit>

বিকল্পগুলি ব্যবহৃত:

  • -p(এছাড়াও -uবা --patch) git-logম্যান পৃষ্ঠাতে ডিআইআইপি লুকানো আছে এবং এটি প্রকৃতপক্ষে একটি প্রদর্শন বিকল্প git-difflogএটির সাথে ব্যবহার করা হলে , এটি প্রতিশ্রুতিবদ্ধ তথ্যের সাথে প্রতি কমিটের জন্য তৈরি হওয়া প্যাচটি দেখায় — এবং নির্দিষ্টটি স্পর্শ না করে এমন প্রতিশ্রুতি লুকায়<path> । (এই আচরণটি অনুচ্ছেদে বর্ণিত হয়েছে --full-diff, যার ফলে প্রতিটি প্রতিশ্রুতিতে সম্পূর্ণ ভিন্নতা দেখা যায়))
  • -1শো শুধু সাম্প্রতিকতম পরিবর্তন নির্বাচিত ফাইল ( -n 1পরিবর্তে ব্যবহার করা যেতে পারে -1); অন্যথায়, ফাইলটির সমস্ত অ-শূন্য পার্থক্য দেখানো হয়।
  • --follow একটি পুনর্নামকরণের পূর্বে ঘটে যাওয়া পরিবর্তনগুলি দেখতে প্রয়োজন।

যতদূর আমি বলতে পারি, git logহস্তক্ষেপী সংশোধনীর সংখ্যা গণনা করতে বা কমিটের হ্যাশ নির্ধারণের জন্য (বা অনুরূপ) ব্যবহার না করে কোনও ফাইলের সাথে সংশোধন করা শেষ সেটটি অবিলম্বে দেখার একমাত্র উপায় ।

পুরানো সংশোধনী পরিবর্তনগুলি দেখতে, কেবল লগের মাধ্যমে স্ক্রোল করুন বা লগটি শুরু করার জন্য কোনও কমিট বা ট্যাগ নির্দিষ্ট করুন। (অবশ্যই, প্রতিশ্রুতিবদ্ধ বা ট্যাগ নির্দিষ্ট করা আপনাকে সঠিক প্রতিশ্রুতি বা ট্যাগ কী তা নির্ধারণের মূল সমস্যাটি ফিরিয়ে দেয়))

যেখানে দেনা আছে সেখানে দেনা পরিশোধ করুন:

  • আমি এই উত্তরlog -p ধন্যবাদ আবিষ্কার ।
  • ফ্রান্সিসকোপুগাকে ক্রেডিট করুন এবং আমাকে বিকল্পটি দেখানোর জন্য এই উত্তর--follow
  • -n 1বিকল্পটি উল্লেখ করার জন্য ক্রিসবেট্টিকে ক্রেডিট এবং -1ভেরিয়েন্টটি উল্লেখ করার জন্য আতাতকো ।
  • আমাকে আসলে ডকুমেন্টেশন পড়ার জন্য এবং -pশব্দার্থগতভাবে " কী " বোঝার তা খুঁজে পাওয়ার জন্য সোয়েভার 2112 এর ক্রেডিট ।

6
এটি আমার জন্য দুর্দান্ত সমাধান ছিল। আমি যখন দৌড়েছি তখন প্রতিটি ফাইলের প্রতিশ্রুতিবদ্ধতা এবং তার পার্থক্যগুলি দেখিয়েছিgit log -p filename
ইয়ান জ্যামিসন

4
পারফেক্ট। শেষ পরিবর্তনটি দেখতে -n 1প্যারামিটার যুক্ত করার মতোই সহজ । git log -p -n 1 filename
ক্রিস বেটি

@ ক্রিসবেটি ধন্যবাদ; আমি আমার উত্তরে এটি অন্তর্ভুক্ত করেছি!
কাইল স্ট্র্যান্ড

1
-n 1এছাড়াও -1এটি দ্বারা প্রতিস্থাপন করা যেতে পারে , ফলাফলটি পরিবর্তন হয় না আমি কেবল বাক্য git log -p -1 filename
গঠনকেই

1
এখানে একটি দরকারী বিকল্প রয়েছে - "--স্কিপ = [এন]"। আপনি git log -p -1 --skip=1 <path>দ্বিতীয় প্রতিশ্রুতি প্রদর্শন করতে টাইপ করতে পারেন ।
ম্যাকিক Łoziński

220

গিট ডিফ ব্যবহারের অন্যতম উপায় হ'ল:

git diff <commit> <path>

এবং শেষ প্রতিশ্রুতিবদ্ধতার একটি প্রতিশ্রুতিবদ্ধ করার একটি সাধারণ উপায় হ'ল আসল হেডের তুলনামূলক পথ। আপনি আগের কমিটগুলিকে হেড ^ হিসাবে উল্লেখ করতে পারেন (উদাহরণস্বরূপ এটি 123abc হবে) বা হেড ^^ (আপনার উদাহরণে 456 ডিফ) ইত্যাদি ...

সুতরাং আপনার প্রশ্নের উত্তরটি হ'ল:

git diff HEAD^^ myfile

6
ওহ অবশ্যই. আমি চেষ্টা করেছিলাম HEAD^, তবে অবশ্যই তাতে কিছু হয়নি। চেষ্টা করার কথা ভাবেনি HEAD^^
চৌলেট

17
দীর্ঘকালীন HEAD~2
কমিটের

19
এটি সত্য নয় (কমপক্ষে গিট ১.৯.০ এর জন্য) HEAD^^ myfileএটি পরিবর্তিত দ্বিতীয় থেকে শেষ প্রতিশ্রুতিটি উল্লেখ করবে myfile; এটি সামগ্রিকভাবে দ্বিতীয় থেকে শেষ প্রতিশ্রুতিটি উল্লেখ করবে। কমিট হ্যাশকে নির্দিষ্ট করে (অংশ) বা ফাইলটি করা এবং বর্তমান সংশোধনীর মধ্যে করা কমিটের সংখ্যা গণনা না করেই "এই ফাইলটিতে সর্বশেষ পরিবর্তনটি দেখতে চাই" উল্লেখ করার কোনও উপায় আছে কি ?
কাইল স্ট্র্যান্ড

3
এইচএম, দেখতে দেখতে git log -pবেশ কাছাকাছি।
কাইল স্ট্র্যান্ড

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

8

আপনি যদি কোনও গ্রাফিকাল সরঞ্জাম ব্যবহার করে ভাল থাকেন তবে এটি খুব ভালভাবে কাজ করে:

gitk <file>

gitk এখন সমস্ত কমিট দেখায় যেখানে ফাইলটি আপডেট করা হয়েছে। প্রতিশ্রুতিবদ্ধ হিসাবে চিহ্নিত করা আপনাকে তালিকার পূর্বের প্রতিশ্রুতিগুলির বিপরীতে দেখায়। এটি ডিরেক্টরিগুলির জন্যও কাজ করে, তবে তারপরে আপনি নির্বাচিত প্রতিশ্রুতিগুলির জন্য পৃথক করার জন্য ফাইলটিও নির্বাচন করতে পারেন। সুপার দরকারী!


1
এছাড়াও খুব দরকারী: git difftool HEAD^ fileবাgit difftool -d HEAD^ path
ForeverLearning
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.