ম্যাকে কাজ করার সময় যদি কোনো Git rebase থেমে যায়, তবে প্রথমে git status দিয়ে যাচাই করুন এটি এখনও চলমান আছে কিনা। পুনরায় শুরু করতে, প্রতিটি দ্বন্দ্ব (conflict) সমাধান করুন, কেবল সমাধান করা ফাইলগুলো স্টেজ করুন এবং git rebase --continue চালান। Rebase শুরুর পূর্ববর্তী ব্রাঞ্চের অবস্থায় ফিরে যেতে, git rebase --abort চালান। এই বিকল্পগুলো ভিন্ন ফলাফল দেয়, তাই কোনো কমান্ড দেওয়ার আগে নিশ্চিত হন যে আপনি কোন ফলাফলটি চান।
১. রিপোজিটরি পুনরায় খুলুন এবং এর অবস্থা পরীক্ষা করুন
Spotlight বা Finder-এর Applications > Utilities ফোল্ডার থেকে Terminal খুলুন। Terminal-এ, রিপোজিটরির শীর্ষ স্তরের ডিরেক্টরিতে (top-level directory) যান, তারপর এর অবস্থা পরীক্ষা করুন:
cd '/path/to/your/repository'
git status
উদাহরণের পাথটি আপনার রিপোজিটরির পাথ দিয়ে প্রতিস্থাপন করুন। আপনি যদি এমন কোনো পাথ টাইপ করেন যাতে স্পেস বা শেলের মেটাক্যারেক্টার থাকে, তবে দেখানো পদ্ধতির মতো সেটিকে সিঙ্গেল কোটেশনের মধ্যে রাখুন। Terminal-এর ডিফল্ট শেল হলো zsh, যদিও কোনো অ্যাডমিনিস্ট্রেটর বা আপনার সেটিংস অন্য কোনো শেল নির্ধারণ করে থাকতে পারে। Apple-এর Terminal গাইড
Git যদি রিপোর্ট করে যে rebase প্রক্রিয়াধীন রয়েছে, তবে কনফ্লিক্ট হওয়া পাথ এবং বর্তমান ধাপের জন্য স্ট্যাটাস আউটপুটটি পড়ুন। এটি যদি কোনো সক্রিয় rebase রিপোর্ট না করে, তবে অনুমানের ওপর ভিত্তি করে --continue বা --abort চালাবেন না; কী ঘটেছে তা সিদ্ধান্ত নেওয়ার আগে স্ট্যাটাস এবং সাম্প্রতিক হিস্ট্রি পর্যালোচনা করুন। git status আনট্র্যাকড ফাইলসহ ওয়ার্কিং-ট্রি এবং ইনডেক্সের পরিবর্তনের রিপোর্ট দেয়, তাই প্রতিটি ফাইল rebase-এর অংশ বলে ধরে না নিয়ে এর সম্পূর্ণ আউটপুটটি পড়ুন। Git-এর git status সম্পর্কিত ডকুমেন্টেশন
২. সতর্কতার সাথে দ্বন্দ্ব (conflicts) সমাধান করে পুনরায় শুরু করুন
আপনার এডিটরে প্রতিটি কনফ্লিক্টযুক্ত ফাইল খুলুন। Git টেক্সট কনফ্লিক্টগুলোকে <<<<<<<, =======, এবং >>>>>>>-এর মতো অংশ দিয়ে চিহ্নিত করে। চূড়ান্ত কনটেন্ট কী হওয়া উচিত তা নির্ধারণ করুন, ফাইলটি এডিট করুন এবং কনফ্লিক্ট মার্কারগুলো সরিয়ে ফেলুন। স্বয়ংক্রিয়ভাবে যেকোনো একটি দিক গ্রহণ করবেন না, যদি না সেটি আপনার কাঙ্ক্ষিত কোড বা টেক্সটের সাথে মিলে যায়। Git-এর rebase গাইডে দ্বন্দ্ব-সমাধানের ক্রম বর্ণনা করা হয়েছে: ফাইলগুলো এডিট করুন, সমাধানগুলো স্টেজ করুন, তারপর কন্টিনিউ করুন। Git-এর git rebase সম্পর্কিত ডকুমেন্টেশন
Terminal-এ ফিরে যান এবং স্টেজ করার আগে প্রাসঙ্গিক পরিবর্তনগুলো পরীক্ষা করুন। উদাহরণস্বরূপ:
git diff
git status-এ প্রদর্শিত আসল পাথ ব্যবহার করে প্রতিটি সমাধানকৃত পাথ নাম দিয়ে স্টেজ করুন:
git add 'path/to/resolved-file'
git status
git rebase --continue
কোটেশনগুলো স্পেস বা শেলের মেটাক্যারেক্টারযুক্ত পাথকে সুরক্ষিত রাখে; পাথে কোটেশনের প্রয়োজন না হলে তা বাদ দিন। git add নির্দিষ্ট ফাইলের বর্তমান কনটেন্ট স্টেজ করে, তাই এতে কোনো অপ্রাসঙ্গিক সম্পাদনা থাকলে প্রথমে diff পরীক্ষা করে নিন। সঠিক সমাধান স্টেজ হয়েছে কিনা তা নিশ্চিত করতে পুনরায় স্ট্যাটাস চেক করুন। Git অন্য কোনো দ্বন্দ্বে আবার থেমে যেতে পারে বা আপনাকে একটি কমিট মেসেজ এডিট করতে বলতে পারে; প্রম্পট অনুসরণ করুন, তারপর সমাধান, স্টেজ এবং কন্টিনিউ করার ধাপগুলো পুনরাবৃত্তি করুন। Git-এর git add সম্পর্কিত ডকুমেন্টেশন
git rebase --skip কেবল তখনই ব্যবহার করুন যখন আপনি ইচ্ছাকৃতভাবে বর্তমানে রিপ্লে হতে থাকা কমিটটি বাদ দিতে চান। এটি সেই প্যাচটিকে পেরিয়ে সামনে এগিয়ে যায়; এটি একই কমিট পুনরায় শুরু করার বিকল্প কোনো উপায় নয়। বাদ দিলে প্রয়োজনীয় কোনো কাজ মুছে যাবে কিনা তা নিয়ে যদি আপনার অনিশ্চয়তা থাকে, তবে এটি ব্যবহার করবেন না। Git-এর git rebase অপশনসমূহ
৩. Rebase পূর্বাবস্থায় ফিরিয়ে নিতে চাইলে Abort করুন
আপনি যদি অপারেশনটি থামিয়ে মূল ব্রাঞ্চের অবস্থায় ফিরে যেতে চান, তবে চালান:
git rebase --abort
git status
Git-এর নথিপত্র অনুসারে --abort কমান্ডটি HEAD-কে মূল ব্রাঞ্চের অবস্থানে রিসেট করে (অথবা rebase শুরুর সময় কোনো ব্রাঞ্চ নির্দিষ্ট করা হয়ে থাকলে সেই ব্রাঞ্চে রিসেট করে)। তারপর স্ট্যাটাস চেক করুন এবং ফলাফলটি আপনার প্রত্যাশামতো হয়েছে কিনা তা যাচাই করুন। Git-এর git rebase সম্পর্কিত ডকুমেন্টেশন
--abort-এর সাথে --quit-কে গুলিয়ে ফেলবেন না। git rebase --quit কমান্ডটি rebase অপারেশন শেষ করে দেয়, তবে HEAD, ইনডেক্স এবং ওয়ার্কিং ট্রির অবস্থা সেই মুহূর্তে ঠিক যেমন ছিল তেমনই রেখে দেয়। কেবল তখনই এটি বেছে নিন যদি আপনি বিশেষভাবে rebase বন্ধ করতে চান কিন্তু বর্তমান অসম্পূর্ণ অবস্থাটি ধরে রাখতে চান; এটি rebase শুরুর পূর্বের ব্রাঞ্চের অবস্থা পুনরুদ্ধার করে না। Rebase-এ যদি --autostash ব্যবহৃত হয়ে থাকে, তবে quit করার সময় Git সেই অস্থায়ী স্ট্যাশ সংরক্ষণ করে রাখে। Git-এর git rebase অপশনসমূহ
৪. Terminal বন্ধ হয়ে গেলে বা অবস্থা স্পষ্ট না হলে
Terminal উইন্ডো বন্ধ হয়ে যাওয়ার অর্থ এই নয় যে Git-এর rebase সম্পূর্ণ হয়েছে। রিপোজিটরিটি পুনরায় খুলুন এবং git status চালান; প্রদর্শিত অবস্থা থেকে কাজ চালিয়ে যান। বিদ্যমান কোনো rebase সক্রিয় থাকা অবস্থায় মূল git rebase কমান্ডটি পুনরায় চালাবেন না।
যদি কোনো ব্যাঘাতের কারণে রিপোজিটরি এমন অবস্থায় চলে যায় যেখানে Git আর সক্রিয় rebase চিনতে পারছে না, তবে অনুমানের ওপর ভিত্তি করে নিজে থেকে .git স্টেট ফাইল মুছে ফেলা বা reset --hard ব্যবহার করা এড়িয়ে চলুন। Git-এর ডকুমেন্টেশনে উল্লেখ রয়েছে যে apply ব্যাকএন্ডের সাথে অসময়ে ব্যাঘাত ঘটলে এমন একটি rebase অবস্থা তৈরি হতে পারে যা পরবর্তীতে --abort দিয়ে স্বাভাবিকভাবে বাতিল করা যায় না। প্রথমে যেকোনো গুরুত্বপূর্ণ আনকমিটেড কাজ সংরক্ষণ করুন, তারপর সাম্প্রতিক ব্রাঞ্চ মুভমেন্ট বোঝার জন্য git status এবং git reflog পরীক্ষা করুন। Reflog ব্রাঞ্চ টিপসের সাম্প্রতিক লোকাল আপডেটগুলো রেকর্ড করে; এটি আগের কোনো কমিট চিহ্নিত করতে সাহায্য করতে পারে, তবে তা পুনরুদ্ধার করার সিদ্ধান্ত সতর্কতার সাথে নেওয়া উচিত। Git-এর rebase interruptability নোটসমূহ, Git-এর git reflog সম্পর্কিত ডকুমেন্টেশন
সাধারণ বিঘ্নিত-দ্বন্দ্বের ক্ষেত্রে নিরাপদ সিদ্ধান্তটি সহজ: --continue-এর পূর্বে কাঙ্ক্ষিত পরিবর্তনগুলো সমাধান এবং স্টেজ করুন, অথবা rebase পরিত্যাগ করে শুরুর অবস্থায় ফিরে যেতে চাইলে --abort ব্যবহার করুন। যেকোনো পদক্ষেপ নেওয়ার পর পুনরায় git status চেক করুন যাতে আপনি নিশ্চিত হতে পারেন যে আপনার Mac-এর ওয়ার্কিং কপিটি প্রকৃতপক্ষে কোন অবস্থায় রয়েছে।