ম্যাকওএস (macOS)-এ কোনো লোকাল গিট ব্রাঞ্চ ডিলিট করা নিরাপদ কিনা তা যাচাই করতে, আপনার ওয়ার্কিং ট্রি পরীক্ষা করুন, আপনি যে ব্রাঞ্চটি রাখতে চান তার সাথে ব্রাঞ্চটির কমিটগুলোর তুলনা করুন, এবং এটি অন্য কোনো ওয়ার্কট্রিতে ব্যবহৃত হচ্ছে কিনা তা যাচাই করুন। টার্মিনাল খুলুন, রিপোজিটরিতে যান এবং গিটের মার্জড-ব্রাঞ্চ চেকটিকে প্রমাণ হিসেবে ব্যবহার করুন—ব্রাঞ্চটির কোনো মূল্য নেই এমন নিশ্চয়তা হিসেবে নয়। আপনি যদি নিশ্চিত না হন, তবে এর কাজ সংরক্ষিত হয়েছে তা নিশ্চিত না হওয়া পর্যন্ত ব্রাঞ্চটি রেখে দিন।
১. রিপোজিটরি খুলুন এবং অসমাপ্ত পরিবর্তনের খোঁজ করুন
Applications > Utilities থেকে Terminal খুলুন, অথবা এটি খুঁজতে Spotlight ব্যবহার করুন। অ্যাপল টার্মিনালের ডিফল্ট শেল হিসেবে zsh-কে নথিভুক্ত করে এবং নিচের কমান্ডগুলো স্ট্যান্ডার্ড ম্যাকওএস সেটআপে কাজ করে। টার্মিনালে রিপোজিটরি ডিরেক্টরিতে যান; পাথে কোনো স্পেস থাকলে তা উদ্ধৃতি চিহ্নের (quote) মধ্যে রাখুন:
cd "/path/to/your/repository"
git status --short --branch
স্ট্যাটাস আউটপুট চেক-আউট করা ব্রাঞ্চ এবং ফাইলগুলোতে কোনো পরিবর্তন আছে কিনা তা প্রদর্শন করে। ব্রাঞ্চ পরিবর্তন করার আগে প্রয়োজনীয় ফাইল পরিবর্তনগুলো কমিট করুন বা অন্যভাবে সংরক্ষণ করুন। এই চেকটি ব্রাঞ্চের ইতিহাস থেকে আলাদা: একটি পরিষ্কার ওয়ার্কিং ট্রির অর্থ এই নয় যে ব্রাঞ্চটির কমিটগুলো মার্জ করা হয়েছে। একইভাবে, আপনি গিটের স্বাভাবিক সেফ-ডিলিট অপশন দিয়ে কোনো ব্রাঞ্চ ডিলিট করলেই যে আনকমিটেড পরিবর্তনগুলো সুরক্ষিত থাকবে, তা নয়।
২. ব্রাঞ্চটি সঠিক টার্গেটে মার্জ করা হয়েছে কিনা তা যাচাই করুন
প্রথমে আপনি যে ব্রাঞ্চটি রাখতে চান তা চিহ্নিত করুন, সাধারণত main বা develop। আপনি যদি বর্তমানে ক্যান্ডিডেট ব্রাঞ্চে থাকেন, তবে কিছু ডিলিট করার আগে টার্গেট ব্রাঞ্চে সুইচ করুন। নিচে feature/example এবং main-কে আপনার আসল ব্রাঞ্চের নাম দিয়ে প্রতিস্থাপন করুন:
git switch main
git branch --merged main
git branch --no-merged main
প্রথম তালিকায় এমন লোকাল ব্রাঞ্চগুলো থাকে যেগুলোর টিপস main থেকে পৌঁছানো যায় (reachable); দ্বিতীয় তালিকায় এমন ব্রাঞ্চগুলো থাকে যেগুলোর ক্ষেত্রে তা সম্ভব নয়। গিট git branch --merged-কে নির্দিষ্ট কমিটে (বা কোনোটি সরবরাহ না করা হলে HEAD-এ) মার্জ হওয়া ব্রাঞ্চের তালিকা হিসেবে বর্ণনা করে। এটি একটি কমিট-হিস্ট্রি পরীক্ষা, তাই এটি কেবল তখনই কার্যকর যখন main এমন একটি ব্রাঞ্চ যাতে কাজটি থাকা উচিত। অন্য কোনো রিলিজ বা ইন্টিগ্রেশন ব্রাঞ্চে মার্জ হওয়া ব্রাঞ্চ এখনও main-এর সাপেক্ষে আনমার্জড হিসেবে প্রদর্শিত হতে পারে। Git branch documentation
ক্যান্ডিডেট ব্রাঞ্চটি যদি --merged main-এ প্রদর্শিত হয়, তবে এটি একটি জোরালো ইঙ্গিত যে এর কমিটগুলো ইতোমধ্যে main থেকে পৌঁছানো সম্ভব। আপনার প্রত্যাশিত জায়গায় ফিচার বা ফিক্স উপস্থিত রয়েছে কিনা তা নিশ্চিত করুন, বিশেষ করে যদি আপনার দল পুল রিকোয়েস্ট, রিলিজ ব্রাঞ্চ বা ভিন্ন কোনো মার্জ টার্গেট ব্যবহার করে থাকে। এটি যদি --no-merged-এর অধীনে প্রদর্শিত হয়, তবে এতে অনন্য (unique) কী কমিট রয়েছে তা পরীক্ষা না করা পর্যন্ত এটি ডিলিট করবেন না।
৩. কমিট এবং আপস্ট্রিম ট্র্যাকিং পরীক্ষা করুন
টার্গেটের সাথে ক্যান্ডিডেটের তুলনা করতে, ব্যবহার করুন:
git log --oneline main..feature/example
এটি feature/example থেকে পৌঁছানো যায় এমন কমিটগুলো প্রদর্শন করে যা main থেকে পৌঁছানো যায় না। যদি এটি কমিট প্রদর্শন করে, তবে সেগুলো পরীক্ষা করুন এবং সিদ্ধান্ত নিন যে সেগুলো মার্জ, চেরি-পিক বা রাখা প্রয়োজন কিনা। একটি ফাঁকা ফলাফলের অর্থ হলো এই তুলনায় ক্যান্ডিডেটের main-এর বাইরে অতিরিক্ত কোনো কমিট নেই; তবে এটি নিশ্চিত করে না যে ব্রাঞ্চটির নাম বা এর উদ্দেশ্যের আর কোনো প্রয়োজন নেই।
একটি ব্রাঞ্চ দূরবর্তী (remote) কোনো ব্রাঞ্চকেও ট্র্যাক করতে পারে। এর ট্র্যাকিং তথ্য যাচাই করতে ব্যবহার করুন:
git branch -vv
একটি আপস্ট্রিম হলো পুল এবং পুশের মতো অপারেশনের জন্য গিট দ্বারা ব্যবহৃত একটি কনফিগার করা রেফারেন্স। আপস্ট্রিম অনুপস্থিত বা চলে যাওয়ার অর্থ এই নয় যে লোকাল ব্রাঞ্চটি মুছে ফেলা নিরাপদ: এর কমিটগুলো এখনও অনন্য হতে পারে। এছাড়াও, আপনি ফেচ না করা পর্যন্ত একটি রিমোট-ট্র্যাকিং রেফারেন্স পুরনো (stale) হয়ে থাকতে পারে। আপনি যদি রিমোট-ট্র্যাকিং ডেটা রিফ্রেশ করতে চান, তবে git fetch --prune origin কমান্ডটি origin থেকে ফেচ করে এবং সেই রিমোটের রেফস্পেক অনুযায়ী পুরনো রিমোট-ট্র্যাকিং রেফারেন্সগুলো অপসারণ করে; এটি আপনার লোকাল ব্রাঞ্চ ডিলিট করে না। Git fetch documentation
৪. ওয়ার্কট্রি যাচাই করুন, তারপর নিরাপদে ডিলিট করুন
একটি ব্রাঞ্চ অন্য কোনো লিঙ্কড ওয়ার্কট্রিতে চেক আউট করা থাকতে পারে। গিট এমন কোনো ব্রাঞ্চ ডিলিট করতে অস্বীকার করে যা চেক আউট করা আছে, তাই যদি ডিলিট করা প্রত্যাখ্যাত হয়, তবে পরবর্তী পদক্ষেপ নেওয়ার আগে git worktree list দেখুন এবং তালিকাভুক্ত ডিরেক্টরিগুলো পরীক্ষা করুন। এছাড়াও নিশ্চিত করুন যে ক্যান্ডিডেটটি আপনার বর্তমান ব্রাঞ্চ নয়; প্রথমে নির্ধারিত টার্গেটে সুইচ করুন। Git branch documentation
আপনি যখন নিশ্চিত হয়েছেন যে কাজটি সংরক্ষিত আছে এবং ব্রাঞ্চটির আর প্রয়োজন নেই, তখন গিটের সুরক্ষিত অপশন ব্যবহার করে এটি ডিলিট করুন:
git branch -d feature/example
গিট -d ব্যবহারের অনুমতি কেবল তখনই দেয় যখন ব্রাঞ্চটি তার কনফিগার করা আপস্ট্রিমে সম্পূর্ণরূপে মার্জ করা থাকে, অথবা কোনো আপস্ট্রিম কনফিগার করা না থাকলে HEAD-এ মার্জ করা থাকে। গিট যদি প্রত্যাখ্যান করে, তবে সেটিকে তদন্ত করার একটি তাগিদ হিসেবে বিবেচনা করুন। -D মার্জ স্ট্যাটাস নির্বিশেষে জোরপূর্বক ডিলিট করে; এটি এই সুরক্ষাব্যবস্থাকে এড়িয়ে যায় এবং এটি কোনো নিয়মিত সমাধান হওয়া উচিত নয়। Git branch documentation
একটি সতর্ক সিদ্ধান্ত বেশ সহজ: ক্যান্ডিডেটের কাজটি কাঙ্ক্ষিত গন্তব্যে উপস্থিত থাকার পর, অনন্য কমিটগুলো পর্যালোচনা করার পর এবং কোনো ওয়ার্কট্রি ব্রাঞ্চটি ব্যবহার না করার পরেই কেবল -d দিয়ে ডিলিট করুন। এই চেকগুলোর কোনোটি অস্পষ্ট হলে, ব্রাঞ্চটি রেখে দিন এবং প্রথমে এর গন্তব্য স্পষ্ট করুন।