আমার কাছে 2 টি কমিট রয়েছে, তখন এ বি, ধাক্কা দেওয়ার জন্য প্রস্তুত। আমি বুঝতে পারি আমি এ তে কিছু যুক্ত করতে ভুলে গেছি
আমি এই পরিবর্তনটিকে কীভাবে ম্যাজিট ব্যবহার করে যুক্ত করতে পারি? গিট ডকুমেন্টেশনের কোন অংশটি আমার দিকে নেওয়া উচিত তা আমি জানি না।
আমার কাছে 2 টি কমিট রয়েছে, তখন এ বি, ধাক্কা দেওয়ার জন্য প্রস্তুত। আমি বুঝতে পারি আমি এ তে কিছু যুক্ত করতে ভুলে গেছি
আমি এই পরিবর্তনটিকে কীভাবে ম্যাজিট ব্যবহার করে যুক্ত করতে পারি? গিট ডকুমেন্টেশনের কোন অংশটি আমার দিকে নেওয়া উচিত তা আমি জানি না।
উত্তর:
আসুন একটি মুহুর্তের জন্য ভান করুন যে আপনি HEAD
প্রতিশ্রুতিতে কিছু যুক্ত করতে চান , যেমন আপনার উদাহরণে "দ্বিতীয় প্রতিশ্রুতি বি"।
প্রতিশ্রুতিবদ্ধ পপআপ cবৈশিষ্ট্যটিতে একটি বাধ্যতামূলক " aসংশোধন" রয়েছে। এই কীটি টিপলে HEAD
প্রতিশ্রুতিবদ্ধ পর্যায়ের পরিবর্তনগুলি "সংশোধন" হবে । যেহেতু গিটে কমিটগুলি পরিবর্তনযোগ্য নয়, এটি আসলে পুরানো প্রতিশ্রুতিটিকে নতুন প্রতিশ্রুতি দিয়ে প্রতিস্থাপন করবে। পুরানো প্রতিশ্রুতি বার্তা সহ একটি বাফার পপ আপ হবে, যাতে যুক্ত পরিবর্তনের ক্ষেত্রেও আপনি বার্তাটি সামঞ্জস্য করতে প্রয়োজন হয় এমন ক্ষেত্রে আপনি এটি পরিবর্তন করতে পারেন। সর্বদা হিসাবে, C-c C-cআপনি বার্তাটি সম্পাদনা করার পরে টিপুন । এটি git commit --amend
কমান্ড লাইনে চলার সমতুল্য ।
HEAD
এর প্রতিশ্রুতি বার্তাটি পর্যায়ক্রমে পরিবর্তনগুলি যুক্ত করুন এবং সম্পাদনা করুনকারণ এটি প্রায়শই ঘটে যে আপনি কেবল পরিবর্তন বা বার্তাটি সামঞ্জস্য করতে হবে , Magit দুটি অতিরিক্ত ভেরিয়েন্ট সরবরাহ করে:
HEAD
প্রতিশ্রুতি বার্তাটি সম্পাদনা না করে পর্যায়ের পরিবর্তনগুলি যুক্ত করুনHEAD
এটিতে মঞ্চ পরিবর্তনগুলি না যুক্ত করে এর বার্তাটি পরিবর্তন করুনআপনি যখন কোনও অঙ্গীকার সম্পাদনা করতে চান যা তা নয় HEAD
, তখন উপরেরগুলি কাজ করবে না। এই আদেশগুলি সর্বদা কমিটকে "সংশোধন" করে (অর্থাত্ প্রতিস্থাপন) করে HEAD
। গিট কোনও কমিট সংশোধন করার জন্য একটি কমান্ড সরবরাহ করে না এটি ব্যতীত HEAD
আরও জড়িত।
ম্যাজিট এই জাতীয় কমান্ড সরবরাহ করে তবে এমন পরিস্থিতিতে রয়েছে যেগুলি একাধিক পদক্ষেপে এটি করা ভাল rable তাই আমরা প্রথমে সে বিষয়ে আলোচনা করব।
ব্যতীত অন্য কোন প্রতিশ্রুতি সংশোধন HEAD
করে তিনটি ধাপে বিভক্ত করা যেতে পারে:
A
) HEAD
।HEAD
(উপরে বর্ণিত হিসাবে) সংশোধন করুন , ফলে প্রতিশ্রুতিবদ্ধ A'
।A
, তবে শীর্ষে A'
।এটি একটি ইন্টারেক্টিভ রিবেস ব্যবহার করে করা যেতে পারে। rরিবেস পপআপ প্রদর্শন করতে টাইপ করুন । তারপরে m"কমিট সম্পাদনা করুন" পুনর্বাসনের বৈকল্পিকের অনুরোধ করতে টাইপ করুন। সাম্প্রতিক কমিট সহ একটি বাফার উপস্থিত হবে। আপনি সংশোধন করতে চান এমন প্রতিশ্রুতিতে যান এবং এটি C-c C-cনির্বাচন করতে টাইপ করুন। গিট তারপরে ইতিহাসটিকে সেই প্রতিশ্রুতিতে রিওয়াইন্ড করে এবং স্ট্যাটাস বাফারে চলমান পুনর্বাসনের তথ্য প্রদর্শন করে।
HEAD
উপরে বর্ণিত হিসাবে সংশোধন করুন । তারপরে গিটকে বলুন যে আপনি টাইপ করে শেষ করেছেন r r। যদি A'
এবং B
দ্বন্দ্ব হয় তবে পুনর্বাসনটি বন্ধ হবে B
এবং আপনার দ্বন্দ্ব সমাধান করতে হবে। আপনি এটি করার পরে r rচালিয়ে যেতে টিপুন ।
যদি আপনি জানেন যে আপনার পরিবর্তনের A
ফলে দ্বন্দ্ব দেখা দেবে B
, তবে উপরে বর্ণিত হিসাবে এগিয়ে যান, অন্যথায় নীচের পদ্ধতিটি ব্যবহার করুন।
গিট ব্যবহার করে "ফিক্সআপ কমিট" তৈরি করতে দেয় git commit --fixup A
। এটি একটি নতুন প্রতিশ্রুতি তৈরি করে , যা পরিবর্তন করে যা "অন্য প্রতিশ্রুতিবদ্ধ হওয়া উচিত ছিল" রেকর্ড করে। সেই কমিট নতুন হয়ে যায় HEAD
। এছাড়াও একটি --squash
বৈকল্পিক বিদ্যমান । পার্থক্য সম্পর্কে তথ্যের জন্য git-commit
ম্যান পৃষ্ঠাটি দেখুন।
আসলে A
কমিট এবং নতুন A'
কমিটকে একত্রিত করতে এবং তারপরে পুনরায় আবেদন B
করতে হবে আপনাকে রিবেস ব্যবহার করতে হবে। Magit এটি করার জন্য একটি সুবিধাজনক কমান্ড সরবরাহ করে r f।
উপরোক্ত পদ্ধতির মূল পার্থক্য হ'ল এখানে আমরা প্রথমে একটি নতুন প্রতিশ্রুতি তৈরি করি এবং তারপরে আমরা "লক্ষ্য" এর সাথে একত্রিত হয়ে পুনরায় প্রয়োগ করি B
। উপরে আমরা প্রতিশ্রুতি না দিয়ে রিবেসিং দিয়ে শুরু করেছি।
Magit উভয় --fixup
এবং --squash
রূপগুলো থেকে পাওয়া যায় পপআপ কমিট, উপর fএবং s। কিন্তু Magit এছাড়াও উপলব্ধ "ঝটপট" ফিক্সআপ এবং এর স্কোয়াশ কমান্ড রুপভেদ Fএবং S। এই রূপগুলি "অ-তাত্ক্ষণিক" রূপগুলির মতো একটি নতুন প্রতিশ্রুতি তৈরি করে, কিন্তু তারপরে তারা তাত্ক্ষণিকভাবে ফিক্সআপ কমিটকে পুনরায় ব্যবহারের মাধ্যমে টার্গেট কমিটের সাথে একত্রিত করে, আপনাকে অন্য কোনও কমান্ড না চাইতেই।
"ঝটপট ফিক্সআপ" ( c F) মূলত "প্রসারিত হিসাবে একই জিনিস HEAD
" ( c e) ছাড়া এটি কাজ করে কোনো কমিট জন্য, শুধু HEAD
।
আরও পড়া:
git-commit(1)
git-rebase(1)
git-commit
ম্যান পেজটিতে git-rebase(1)
এই রেখাগুলি পুনঃনির্দেশিত হয় : ভাঁজ করা কমিটের জন্য প্রস্তাবিত প্রতিশ্রুতি বার্তাটি প্রথম কমিটের প্রতিশ্রুতিবদ্ধ বার্তা এবং "স্কোয়াশ" কমান্ডের সমাহার, তবে "ফিক্সআপ" দিয়ে কমিটের প্রতিশ্রুতি বার্তা বাদ দেয় কমান্ড। আইওডাব্লু, আপনি যদি পূর্ববর্তী প্রতিশ্রুতিতে কোডটি ঠিক করতে চান তবে ফিক্সআপটি ব্যবহার করুন, আপনি যদি কমিট বার্তাটিও ঠিক করতে চান তবে স্কোয়াশ ব্যবহার করুন।
git commit --amend –C HEAD
আপনি যে গিট কমান্ডটি সন্ধান করতে চান তা হ'ল এবং আপনি ম্যাগিতের মাধ্যমে সংশোধন করতে পারেন C-c C-a
।
C-c C-a
এটি একটি পুরানো সংস্করণ থেকে এসেছে (আমার মনে হয়)। তদ্ব্যতীত, আমি সহায়তা বাফারে "সংশোধন" করার কোনও চিহ্ন দেখতে পাচ্ছি না ( ?
)।
সুতরাং একটি কর্মপ্রবাহ হ'ল:
তারপর
অটোকোয়াশ স্বয়ংক্রিয়ভাবে সমস্ত সরিয়ে নেবে! ফিক্সআপটি সঠিক জায়গায় চলে আসে এবং সেগুলি পুনরায় বেসে স্কোয়াশেড করার জন্য সেট করে।
i
আমার ফলন হয় Cannot rebase: Your index contains uncommitted changes. Please commit or stash them.
। আমার কোনও আপত্তিহীন পরিবর্তন নেই don't : /
Proceed despite merge in rebase range? [c]ontinue, [s]elect other, [a]bort
,। এটি কি আমাকে বলার চেষ্টা করছে যে আমার ফিক্সআপটি আসন্ন সংযুক্তিতে ডুবে যেতে পারে?
merge in rebase
, বুগের অধীনে দেখুন git help rebase
। আমি উপরের দিকে টানানোর আগে ফিক্সআপ করার পরামর্শ দিই।
শেষ প্রতিশ্রুতির প্রশংসা করার জন্য, এটি "গ এ"। কিছু পুরানো প্রতিশ্রুতির প্রশংসা করার জন্য ফিক্সআপ।