গিট: একটি টানার পরে পূর্ববর্তী সংস্করণগুলির তুলনায় পরিবর্তিত ফাইলগুলি কীভাবে পৃথক করবেন?


117

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

কীভাবে হয়?

আমি ধরে নিচ্ছি যে এটি কমিট এক্স বনাম কম্বাইয়ের কিছু প্যারামিটারের সাথে "গিট ডিফ" আছে তবে আমি সিনট্যাক্সটি পেয়েছি বলে মনে হচ্ছে না। আমি "গিট লগ" কিছুটা বিভ্রান্তি পেয়েছি এবং নিশ্চিত নই যে আমার নতুন সংস্করণটির তুলনায় ফাইলটির সর্বশেষ সংস্করণটির কমিট আইডিটি কোথায় পাবেন।


1
আপনি আপনার স্বাদ থেকে gitk গ্রাফিকাল সরঞ্জাম আরও পেতে পারেন।
ক্রেজিস্কট

stackoverflow.com/questions/61002/... এই এক অনুরূপ হতে পারে
VonC

উত্তর:


158

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

git diff HEAD@{1}

এর @{1}অর্থ "আমি নির্দিষ্ট করে রেফার পূর্ববর্তী অবস্থান" এর অর্থ হল, যাতে আপনি পূর্বে যা যা পরীক্ষা করে দেখেছিলেন তার মূল্যায়ন - টানার ঠিক আগে। আপনি কর্মপ্রণালী করতে HEADসেখানে প্রান্তে করেন তাহলে আপনি আপনার কাজ গাছ কিছু পরিবর্তন আছে এবং আপনি তাদের জন্য diffs দেখতে চাই না।

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

git diff HEAD@{1} filename

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


ভনসির লিঙ্কযুক্ত পূর্ববর্তী পোস্টটি মূলত এই হিসাবে একই জিনিসটি বলে, তবে ব্যাখ্যাটি কিছুটা আলাদা, তাই আমি এই মুহূর্তে রেখে দেব। (এটি এর @{1}জন্য একটি শর্টহ্যান্ড হিসাবেও ব্যবহার করে HEAD@{1})
ক্যাস্যাবেল

সত্য, তবে আমি ব্যাখ্যাটি পছন্দ করি। +1
ভনসি

এটি ঠিক আমি অনুসন্ধান করছিলাম। ব্যাখ্যার জন্য ধন্যবাদ।
লুচাপেট

আমি কী গুগল করছি তার জন্য +1। যদি উত্তর হিসাবে এটি নির্বাচিত হয় এবং শীর্ষে
ঠাঁই হয় তবে দুর্দান্ত লাগবে

@ লংগদা যদি আপনি ভোট অনুসারে বাছাই করেন (যা আমি মনে করি ডিফল্ট ছিল) এটি ইতিমধ্যে শীর্ষে থাকা উচিত।
ক্যাসাবেল

57

আমি ব্যবহার করতে চাই:

git diff HEAD^

বা আমি যদি কেবল একটি নির্দিষ্ট ফাইলের মধ্যে পার্থক্য করতে চাই:

git diff HEAD^ -- /foo/bar/baz.txt

5
-1: HEAD^পিতামাতার প্রতিশ্রুতিবদ্ধ, আগে প্রতিশ্রুতিবদ্ধ নয়pull
চার্লসবি

1
যদি HEADমার্জ কমিট HEAD^হয় তবে প্রথম পিতামাতার প্রতিশ্রুতি থাকে, তাই হ্যাঁ, এটি এর আগে প্রতিশ্রুতিবদ্ধ হতে পারে pull। অন্য পিতামাতাকে পেতে (দ্বিমুখী একীকরণের জন্য), ব্যবহার করুন HEAD^2। তবে তারপরে, উপরের উত্তরটি সত্যই প্রথম স্থানে উত্তর দিচ্ছে না, সুতরাং -1 ;-) রেখে
মাইকেল ওয়াইল্ড

স্পষ্টতার জন্য ধন্যবাদ। প্রশ্নটি খুব মনোযোগ সহকারে পড়েনি, কারণ আমি অন্য কোনও কিছুর জন্য গুগল করছি এবং ফলাফলের পৃষ্ঠায় এই লিঙ্কটি উঠে এসেছে high আমি ভেবেছিলাম যে আমি একজন নতুন ব্যবহারকারী এবং আমার কোনও কর্ম নেই (যেহেতু এটি এসও-তে বলা হয়) তবে আমি চিম ইন করব। আমার দোষ =)
ক্যাডিজম

3
@ মিশেলওয়িল্ড এটি জিজ্ঞাসাকারী যা জিজ্ঞাসা করছে তা নাও হতে পারে তবে এটি যখন খুঁজে পেল তখন এটিই আমি খুঁজছিলাম। এটা আমার জন্য দরকারী ছিল। Upvoting।
জন ডিভোরাক

এইটি হল টার্টোইজজিট "পূর্ববর্তী সংস্করণ সহ ডিফ" কী করে। আর আমি যা খুঁজছিলাম
ফ্যাবিয়েন হাদ্দাদি

15

আপনি যদি সরাসরি কাজটি করেন git pullতবে আপনি হয় 'ফাস্ট-ফরওয়ার্ড' হয়ে যাবেন বা দূরবর্তী সংগ্রহশালা থেকে অজানা সংখ্যক কমিটগুলি মার্জ করবেন। যদিও এটি একটি ক্রিয়া হিসাবে ঘটে, সুতরাং শেষ প্রতিশ্রুতি যে আপনি টানার আগেই ছিলেন তা রিফ্লগের শেষ প্রবেশ এবং এটি অ্যাক্সেস করা যেতে পারে HEAD@{1}। এর অর্থ আপনি করতে পারেন:

git diff HEAD@{1}

যাইহোক, আমি দৃ recommend়ভাবে সুপারিশ করব যে এটি যদি এমন কিছু হয় যা আপনি নিজেকে অনেক কিছু করতে দেখেন তবে আপনাকে git fetchনিজেই এটিতে মার্জ করা বা রিবেস করার আগে আনার শাখাটি পরীক্ষা করার বিষয়ে বিবেচনা করা উচিত । যেমন আপনি যদি মাস্টারের উপর থাকেন এবং উত্স / মাস্টারকে টানতে যাচ্ছেন:

git fetch

git log HEAD..origin/master

 # looks good, lets merge

git merge origin/master

এখানে git logপরিবর্তে সুন্দর ব্যবহার git diff(সিনট্যাক্স যদিও '..' এর জন্য git logএবং '...' এর মধ্যে সামঞ্জস্যহীন কিছু হলেওgit diff ) +1 স্ট্যাকওভারফ্লো / প্রশ্নগুলি /
ভনসি

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