git remote updateআপনার রিমোট রেফগুলি আপ টু ডেট আনতে প্রথম ব্যবহার করুন । তারপরে আপনি কয়েকটি বিষয়গুলির মধ্যে একটি করতে পারেন, যেমন:
git status -unoআপনাকে যে শাখাটি ট্র্যাক করা হচ্ছে তা এগিয়ে, পিছনে বা ডাইভার্ট হয়েছে কিনা তা আপনাকে জানাবে। যদি এটি কিছুই না বলে তবে স্থানীয় এবং দূরবর্তী একই।
git show-branch *masterযাদের নামগুলি 'মাস্টার' (যেমন মাস্টার এবং উত্স / মাস্টার ) এ শেষ হয় সেই সমস্ত শাখায় আপনাকে কমিটগুলি দেখায় ।
আপনি যদি ( ) এর -vসাথে ব্যবহার করেন তবে দেখতে পাবেন কোন শাখাগুলি আপডেট হয়েছে, সুতরাং আপনার আর কোনও আদেশের দরকার নেই।git remote updategit remote -v update
তবে দেখে মনে হচ্ছে আপনি কোনও স্ক্রিপ্ট বা প্রোগ্রামে এটি করতে এবং সত্য / মিথ্যা মান দিয়ে শেষ করতে চান। যদি তা হয় তবে আপনার বর্তমান হেড কমিট এবং আপনি যে শাখার সন্ধান করছেন তার প্রধানের মধ্যে সম্পর্ক যাচাই করার উপায় রয়েছে , যদিও চারটি সম্ভাব্য ফলাফল রয়েছে বলে আপনি এটিকে হ্যাঁ / কোনও উত্তর হিসাবে হ্রাস করতে পারবেন না। তবে আপনি যদি কিছু করার জন্য প্রস্তুত থাকেন pull --rebaseতবে আপনি "স্থানীয় পিছনে" এবং "স্থানীয়কে" টানতে হবে "হিসাবে এবং অন্য দুটি" টানতে হবে না "হিসাবে বিবেচনা করতে পারেন।
আপনি যে কোনও রেফ ব্যবহার করে প্রতিশ্রুতিবদ্ধ আইডি পেতে পারেন git rev-parse <ref>, তাই আপনি মাস্টার এবং উত্স / মাস্টার এর জন্য এটি করতে এবং তাদের তুলনা করতে পারেন। যদি তারা সমান হয় তবে শাখাগুলি সমান। যদি তারা অসম হয় তবে আপনি জানতে চান যে অন্যটির চেয়ে এগিয়ে। ব্যবহার git merge-base master origin/masterআপনাকে উভয় শাখার সাধারণ পূর্বপুরুষকে জানিয়ে দেবে, এবং যদি তারা সরানো না হয় তবে এটি এক বা অন্যটির মতো হবে। আপনি যদি তিনটি পৃথক আইডি পান তবে শাখাগুলি অন্যদিকে চলে গেছে।
এটি সঠিকভাবে করতে, যেমন কোনও স্ক্রিপ্টে, আপনাকে বর্তমান শাখা এবং এটি ট্র্যাক করছে এমন দূরবর্তী শাখাটি উল্লেখ করতে সক্ষম হওয়া দরকার। বাশ প্রম্পট-সেটিং ফাংশনে /etc/bash_completion.dশাখার নাম পাওয়ার জন্য কিছু দরকারী কোড রয়েছে। তবে সম্ভবত আপনার নামগুলি পাওয়ার দরকার নেই। শাখাগুলি এবং কমিটস (যেমন ডকুমেন্টেড হিসাবে git rev-parse --help) উল্লেখ করার জন্য গিটের কিছু ঝরঝরে শর্টহ্যান্ড রয়েছে । বিশেষত, আপনি @বর্তমান শাখার জন্য (ধরে নিচ্ছেন যে আপনি কোনও বিচ্ছিন্ন-মাথা অবস্থায় রয়েছেন না) এবং @{u}এর উজানের শাখার জন্য (উদাহরণস্বরূপ origin/master) ব্যবহার করতে পারেন। সুতরাং git merge-base @ @{u}বর্তমান শাখা এবং এর উজানে প্রসারিত হওয়া (হ্যাশ এর) প্রতিশ্রুতি ফিরিয়ে দেবে git rev-parse @এবং git rev-parse @{u}আপনাকে দুটি টিপসের হ্যাশ দেবে। এটি নিম্নলিখিত স্ক্রিপ্টে সংক্ষিপ্তসারিত করা যেতে পারে:
#!/bin/sh
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")
if [ $LOCAL = $REMOTE ]; then
echo "Up-to-date"
elif [ $LOCAL = $BASE ]; then
echo "Need to pull"
elif [ $REMOTE = $BASE ]; then
echo "Need to push"
else
echo "Diverged"
fi
দ্রষ্টব্য: গিটের পুরানো সংস্করণগুলি @নিজে থেকে অনুমতি দেয় না , সুতরাং এর @{0}পরিবর্তে আপনাকে ব্যবহার করতে হতে পারে ।
লাইনটি UPSTREAM=${1:-'@{u}'}আপনাকে বৈকল্পিকভাবে একটি প্রবাহ শাখাটি স্পষ্টভাবে পাস করার অনুমতি দেয়, আপনি যদি বর্তমান শাখার জন্য কনফিগার করা চেয়ে আলাদা কোনও দূরবর্তী শাখার বিরুদ্ধে পরীক্ষা করতে চান তবে। এটি সাধারণত ফর্মের দূরবর্তী নাম / শাখার নাম হতে পারে । যদি কোনও প্যারামিটার দেওয়া না হয় তবে মানটি ডিফল্ট হয় @{u}।
স্ক্রিপ্টটি ধরে নিয়েছে যে আপনি ট্র্যাকিং শাখাগুলি আধুনিক করে তুলতে একটি git fetchবা git remote updateপ্রথম কাজ করেছেন । আমি এটি স্ক্রিপ্টে তৈরি করিনি কারণ এনে আনতে এবং তুলনা করতে পৃথক ক্রিয়াকলাপ হিসাবে এটি আরও নমনীয়, উদাহরণস্বরূপ আপনি যদি আনয়ন ছাড়াই তুলনা করতে চান কারণ আপনি ইতিমধ্যে সম্প্রতি নিয়ে এসেছেন।