আপনার ম্যাকের কোনো গিট রিপোজিটরিতে ট্র্যাক করা একটি ফাইল কীভাবে আগের সংস্করণের চেয়ে আলাদা তা দেখতে, টার্মিনাল খুলুন, রিপোজিটরিতে যান এবং git diff REVISION -- path/to/file রান করুন। REVISION-এর জায়গায় HEAD~1-এর মতো একটি কমিট এবং পাথ হিসেবে ফাইলের রিপোজিটরি-সম্পর্কিত পাথ দিন। এটি সেই কমিট করা সংস্করণের সাথে আপনার ওয়ার্কিং ট্রিতে বর্তমানে থাকা ফাইলের তুলনা করে; এটি ফাইলে কোনো পরিবর্তন করে না।

রিপোজিটরিতে টার্মিনাল খুলুন

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

git status

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

আগের রিভিশনের সাথে বর্তমান ফাইলের তুলনা করুন

এই ফরম্যাটটি ব্যবহার করুন:

git diff REVISION -- "path/to/file"

উদাহরণস্বরূপ, বর্তমান HEAD-এর ঠিক আগের ফার্স্ট-প্যারেন্ট কমিটের সংস্করণের সাথে বর্তমান Sources/Menu.swift ফাইলের তুলনা করতে, এটি রান করুন:

git diff 'HEAD~1' -- "Sources/Menu.swift"

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

HEAD~1 বলতে বর্তমান কমিটের প্রথম প্যারেন্টকে বোঝায়; HEAD~2 এর মাধ্যমে দুই ধাপ আগের ফার্স্ট-প্যারেন্টকে নির্দেশ করা হয়। সাম্প্রতিক হিস্ট্রির জন্য এটি সুবিধাজনক, তবে এটি আপনার ভাবনায় থাকা নির্দিষ্ট পরিবর্তনটি পুরোপুরি চিহ্নিত করতে নাও পারে, বিশেষ করে মার্জের ক্ষেত্রে। গিটের রিভিশন সিনট্যাক্স ব্রাঞ্চের নাম, ট্যাগ এবং কমিট আইডি-ও গ্রহণ করে। কোনো নির্দিষ্ট ঐতিহাসিক পয়েন্টের প্রয়োজন হলে আপনার চিহ্নিত করা একটি কমিট ব্যবহার করুন। গিট রিভিশন সিনট্যাক্স

যে কমিটে ফাইলটি পরিবর্তিত হয়েছে তা খুঁজে বের করতে, এর হিস্ট্রি দেখুন:

git log --oneline -- "Sources/Menu.swift"

আউটপুট থেকে প্রাসঙ্গিক কমিট আইডিটি কপি করুন, তারপর এটি ডিফ কমান্ডে ব্যবহার করুন:

git diff 4f2a9c1 -- "Sources/Menu.swift"

4f2a9c1-এর জায়গায় আপনার রিপোজিটরিতে প্রদর্শিত আসল আইডিটি বসান। গিট স্পষ্ট ও সংক্ষিপ্ত কমিট আইডি গ্রহণ করে; যদি এটি অস্পষ্ট বা ভুল হয়, তবে আরও দীর্ঘ আইডি বা অন্য কোনো রিভিশন নাম ব্যবহার করুন।

আপনার প্রশ্নের সাথে মিল রেখে তুলনা নির্বাচন করুন

ওয়ার্কিং-ট্রি ভিত্তিক তুলনায় স্টেজিং বা আনস্টেজিং নির্বিশেষে ফাইলের বর্তমান সব সম্পাদনা অন্তর্ভুক্ত থাকে। পরিবর্তে আপনি যদি দুটি কমিট করা সংস্করণের তুলনা করতে চান, তবে উভয় রিভিশন উল্লেখ করুন:

git diff OLD_REV NEW_REV -- "Sources/Menu.swift"

উদাহরণস্বরূপ, git diff 'HEAD~3' HEAD -- "Sources/Menu.swift" কমান্ডটি তিন ধাপ আগের ফার্স্ট-প্যারেন্টের কমিট করা ফাইলের সাথে বর্তমান কমিটের সংস্করণের তুলনা করে। এতে আনকমিটেড কোনো পরিবর্তন অন্তর্ভুক্ত থাকে না। গিট এই দুই-কমিটের ফরম্যাটটিকে যেকোনো দুটি কমিটের মধ্যকার তুলনা হিসেবে বর্ণনা করে। গিট ডিফ সংক্রান্ত ডকুমেন্টেশন

আপনি যদি পরবর্তী কমিটের জন্য স্টেজ করা সংস্করণের সাথে তুলনা করতে চান, তবে গিটের --cached ফরম্যাটটি একটি কমিটের সাথে ইনডেক্সের তুলনা করে। উদাহরণস্বরূপ:

git diff --cached HEAD -- "Sources/Menu.swift"

এটি বর্তমান ওয়ার্কিং ফাইলের সাথে তুলনা করার চেয়ে ভিন্ন একটি ফলাফল দেয়: এটি HEAD-এর সাপেক্ষে স্টেজ করা পরিবর্তনগুলো দেখায়।

ফাঁকা আউটপুট এবং সাধারণ ত্রুটিগুলো বুঝুন

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

যে ফাইলটি গিট কখনোই ট্র্যাক করেনি, তুলনা করার জন্য সেটির কোনো কমিট করা সংস্করণ থাকে না। এছাড়াও, গিটের সাধারণ টেক্সট ডিফ বাইনারি ফাইলগুলোর জন্য পঠনযোগ্য লাইন-বাই-লাইন তুলনা নাও দেখাতে পারে। কমান্ডটি কেবল পরিবর্তনগুলো প্রদর্শন করে; এটি পুরোনো সংস্করণ পুনরুদ্ধার করে না। আপনার লক্ষ্য যখন কেবল ফাইলটি পরীক্ষা করা, তখন git checkout বা git restore এড়িয়ে চলুন, কারণ ওই কমান্ডগুলো ফাইলের ওপর ভিন্ন ধরনের প্রভাব ফেলে।

তুলনামূলক সংক্ষিপ্ত পর্যালোচনার জন্য, কনটেক্সটের সংখ্যা কমিয়ে দিতে পারেন, যেমন git diff -U1 'HEAD~1' -- "Sources/Menu.swift"। গিটের -U অপশনটি নির্ধারণ করে আশেপাশে কতগুলো কনটেক্সট লাইন দৃশ্যমান হবে। একবার আপনার কাঙ্ক্ষিত রিভিশন এবং পাথ পেয়ে গেলে, এই কমান্ডটি আপনার ফাইলকে অক্ষত রেখে কী পরিবর্তন হয়েছে তার একটি সরাসরি ও পুনরাবৃত্তিযোগ্য দৃশ্য প্রদান করে।

তথ্যসূত্র