আপনার Mac-এ, Terminal খুলুন, রিপোজিটরিতে যান এবং git status -sb চালান। বর্তমান ব্রাঞ্চটি যদি তার আপস্ট্রিমের তুলনায় ahead 1 (বা অন্য কোনো ধনাত্মক সংখ্যা) দেখায়, তবে এটিতে এমন লোকাল কমিট রয়েছে যা Git যে রিমোট-ট্র্যাকিং ব্রাঞ্চের সাথে তুলনা করছে তাতে উপস্থিত নেই। সেই তুলনাটি রিফ্রেশ করতে প্রথমে ফেচ করুন, তারপর নির্দিষ্ট কমিটগুলো তালিকাভুক্ত করুন। এটি কমিট করা হিস্ট্রি পরীক্ষা করে; যেসব সম্পাদনা কমিট করা হয়নি সেগুলো এক ধরণের আলাদা লোকাল পরিবর্তন।

রিমোট-ট্র্যাকিং ব্রাঞ্চের সাথে বর্তমান ব্রাঞ্চটি যাচাই করুন

Terminal-এ, প্রোজেক্ট ফোল্ডারে যান। আপনি cd লিখে Finder থেকে ফোল্ডারটি Terminal উইন্ডোতে টেনে এনে Return চাপতে পারেন। চালান:

git status -sb

## main...origin/main [ahead 2] এর মতো কোনো ফলাফলের অর্থ হলো, Git-এর সর্বাধিক সাম্প্রতিক রেকর্ড করা রিমোট অবস্থার ভিত্তিতে লোকাল main ব্রাঞ্চটি তার কনফিগার করা আপস্ট্রিম origin/main-এর চেয়ে দুটি কমিট এগিয়ে রয়েছে। [behind 1] এর অর্থ হলো ট্র্যাক করা রিমোট ব্রাঞ্চে এমন একটি কমিট রয়েছে যা লোকালভাবে অনুপস্থিত। যদি উভয় সংখ্যাই প্রদর্শিত হয়, তবে ব্রাঞ্চগুলো ডাইভার্জ (পৃথক) হয়ে গেছে। Git ডকুমেন্টেশনে উল্লেখ রয়েছে যে আপস্ট্রিম সেট করা থাকলে এবং তুলনার জন্য উপলভ্য হলে status কমান্ডটি ahead এবং behind গণনা দেখাতে পারে। Git status সংক্রান্ত ডকুমেন্টেশন

সম্পূর্ণ স্ট্যাটাসের জন্য git status ব্যবহার করুন। এটি ওয়ার্কিং ট্রি এবং স্টেজিং এরিয়ার পরিবর্তনগুলোও রিপোর্ট করে। সেই পরিবর্তিত বা আনট্র্যাকড ফাইলগুলো কিন্তু আনপুশড কমিটের প্রমাণ নয়: সেগুলো এখনও কমিটই করা হয়নি। একটি ক্লিন ওয়ার্কিং ট্রিতেও আনপুশড কমিট থাকতে পারে, আবার একটি ডার্টি ওয়ার্কিং ট্রিতে কোনো আনপুশড কমিট নাও থাকতে পারে।

তুলনাটি রিফ্রেশ করুন, তারপর কমিটগুলো পরিদর্শন করুন

origin/main নামটি একটি লোকাল রিমোট-ট্র্যাকিং রেফারেন্স; এটি সার্ভারের কোনো লাইভ ভিউ নয়। কনফিগার করা রিমোটগুলো থেকে রেফারেন্স আপডেট করতে একটি ফেচ চালান, তারপর আবার স্ট্যাটাস যাচাই করুন:

git fetch
git status -sb

git fetch আপনার বর্তমান ব্রাঞ্চে ফেচ করা পরিবর্তনগুলো মার্জ না করেই রিমোট-ট্র্যাকিং তথ্য আপডেট করে। এটি লোকাল কমিটগুলো পুশ করে না। রিমোটে পৌঁছানো না গেলে বা অথেনটিকেশন পাওয়া না গেলে ফেচ ব্যর্থ হতে পারে; সেক্ষেত্রে, পুরোনো তুলনাটি আপনাকে সার্ভারে বর্তমানে কী আছে তা জানাতে পারবে না। Git fetch সংক্রান্ত ডকুমেন্টেশন

যদি স্ট্যাটাসে দেখায় যে ব্রাঞ্চটি এগিয়ে রয়েছে এবং এর একটি আপস্ট্রিম আছে, তবে এমন কমিটগুলো প্রদর্শন করুন যা আপনার বর্তমান ব্রাঞ্চ থেকে অ্যাক্সেসযোগ্য কিন্তু সেই আপস্ট্রিম থেকে নয়:

git log --oneline '@{u}..HEAD'

প্রতিটি আউটপুট লাইন হলো একটি কমিট; প্রথমটি হলো এই সীমার মধ্যে সবচেয়ে নতুন। একটি খালি ফলাফলের অর্থ Git সেই সীমার মধ্যে কোনো কমিট খুঁজে পায়নি। @{u} শর্টহ্যান্ডের অর্থ হলো বর্তমান ব্রাঞ্চের কনফিগার করা আপস্ট্রিম, এবং দুই-ডট রেঞ্জ এমন কমিটগুলো নির্বাচন করে যা HEAD থেকে অ্যাক্সেসযোগ্য কিন্তু আপস্ট্রিম থেকে নয়। Git revisions সংক্রান্ত ডকুমেন্টেশন

উদাহরণস্বরূপ, স্ট্যাটাসে যদি [ahead 2] দেখায় এবং লগ দুটি কমিট সাবজেক্টের তালিকা দেয়, তবে সেগুলোই হলো ট্র্যাক করা ব্রাঞ্চের চেয়ে লোকালভাবে এগিয়ে থাকা কমিট। আপনি সেগুলো পুশ করার সিদ্ধান্ত নেওয়ার আগে এটি একটি কার্যকর নিশ্চিতকরণ প্রক্রিয়া। এটি নিজে থেকে কিছু পাঠায় না।

Git যদি ব্রাঞ্চের তুলনা করতে না পারে

git status -sb যদি কোনো ahead/behind সংখ্যা না দেখায়, তবে ব্রাঞ্চটির হয়তো কোনো কনফিগার করা আপস্ট্রিম নেই। চালান:

git branch -vv

বর্তমান ব্রাঞ্চটি * চিহ্ন দ্বারা চিহ্নিত থাকে; বন্ধনীতে থাকা টেক্সট (যদি থাকে) তার আপস্ট্রিম এবং ডাইভারজেন্সের সংখ্যা নির্দেশ করে। যদি কোনো আপস্ট্রিম না দেখানো হয়, তবে এই তুলনার জন্য Git-এর কাছে স্বাভাবিক ট্র্যাকিং রেফারেন্স নেই। git remote -v কনফিগার করা রিমোট নাম এবং URL দেখাতে পারে, তবে কোন রিমোট ব্রাঞ্চটি উদ্দিষ্ট গন্তব্য তা এটি নির্ধারণ করে না। Git ডকুমেন্টেশন অনুযায়ী আপস্ট্রিম হলো ঐচ্ছিক ব্রাঞ্চ সেটিংস যা status-এর মতো কমান্ডগুলো দ্বারা ব্যবহৃত হয়। Git pull সংক্রান্ত ডকুমেন্টেশন

অনুমান করে origin/main ব্যবহার করা এড়িয়ে চলুন: আপনার ব্রাঞ্চটি ভিন্ন নামের কোনো ব্রাঞ্চ বা ভিন্ন কোনো রিমোট ট্র্যাক করতে পারে। আপনি যদি উদ্দিষ্ট রিমোট ব্রাঞ্চটি জেনে থাকেন, তবে ফেচ করার পর স্পষ্টভাবে তুলনা করুন, যেখানে origin/main-এর পরিবর্তে এর প্রকৃত নামটি বসাবেন:

git log --oneline origin/main..HEAD

এটি এমন কমিটগুলোর তালিকা তৈরি করে যা আপনার বর্তমান HEAD-এ উপস্থিত কিন্তু সেই রেফারেন্সে অনুপস্থিত। গন্তব্য সম্পর্কে নিশ্চিত না হলে, ফলাফলটিকে পুশ প্রিভিউ হিসেবে বিবেচনা করার আগে ব্রাঞ্চ এবং রিমোট কনফিগারেশন পরীক্ষা করে নিন। Git কনফিগার করা পুশ গন্তব্যকে তুলনার জন্য ব্যবহৃত আপস্ট্রিম থেকে আলাদা হওয়ার অনুমতি দেয়। Git revisions সংক্রান্ত ডকুমেন্টেশন

এই পরীক্ষাটি কী নির্ধারণ করে এবং কী নির্ধারণ করে না

তুলনাটি কেবল সর্বশেষ সফল ফেচের মতোই সাম্প্রতিক। আপনার ফেচ করার পরে অন্য কেউ নতুন কমিট পুশ করতে পারে, অথবা আপনি পুশ করার আগে সার্ভারে পরিবর্তন আসতে পারে। একটি সফল ফেচ Git-কে আরও নতুন রেফারেন্স দেয়; এটি পরবর্তী পুশ সফল হওয়ার নিশ্চয়তা দেয় না। একইভাবে, origin/main-এ অনুপস্থিত কোনো কমিট যে প্রতিটি রিমোট বা ব্রাঞ্চেই অনুপস্থিত থাকবে, এমন কোনো কথা নেই।

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

উৎস