Magit এর সাথে পূর্ববর্তী প্রতিশ্রুতিতে পরিবর্তন যুক্ত করুন


43

আমার কাছে 2 টি কমিট রয়েছে, তখন এ বি, ধাক্কা দেওয়ার জন্য প্রস্তুত। আমি বুঝতে পারি আমি এ তে কিছু যুক্ত করতে ভুলে গেছি

আমি এই পরিবর্তনটিকে কীভাবে ম্যাজিট ব্যবহার করে যুক্ত করতে পারি? গিট ডকুমেন্টেশনের কোন অংশটি আমার দিকে নেওয়া উচিত তা আমি জানি না।

উত্তর:


68

আসুন একটি মুহুর্তের জন্য ভান করুন যে আপনি HEADপ্রতিশ্রুতিতে কিছু যুক্ত করতে চান , যেমন আপনার উদাহরণে "দ্বিতীয় প্রতিশ্রুতি বি"।

প্রতিশ্রুতিবদ্ধ পপআপ cবৈশিষ্ট্যটিতে একটি বাধ্যতামূলক " aসংশোধন" রয়েছে। এই কীটি টিপলে HEADপ্রতিশ্রুতিবদ্ধ পর্যায়ের পরিবর্তনগুলি "সংশোধন" হবে । যেহেতু গিটে কমিটগুলি পরিবর্তনযোগ্য নয়, এটি আসলে পুরানো প্রতিশ্রুতিটিকে নতুন প্রতিশ্রুতি দিয়ে প্রতিস্থাপন করবে। পুরানো প্রতিশ্রুতি বার্তা সহ একটি বাফার পপ আপ হবে, যাতে যুক্ত পরিবর্তনের ক্ষেত্রেও আপনি বার্তাটি সামঞ্জস্য করতে প্রয়োজন হয় এমন ক্ষেত্রে আপনি এটি পরিবর্তন করতে পারেন। সর্বদা হিসাবে, C-c C-cআপনি বার্তাটি সম্পাদনা করার পরে টিপুন । এটি git commit --amendকমান্ড লাইনে চলার সমতুল্য ।

  • a সংশোধন করুন - HEADএর প্রতিশ্রুতি বার্তাটি পর্যায়ক্রমে পরিবর্তনগুলি যুক্ত করুন এবং সম্পাদনা করুন

কারণ এটি প্রায়শই ঘটে যে আপনি কেবল পরিবর্তন বা বার্তাটি সামঞ্জস্য করতে হবে , Magit দুটি অতিরিক্ত ভেরিয়েন্ট সরবরাহ করে:

  • e প্রসারিত করুন - HEADপ্রতিশ্রুতি বার্তাটি সম্পাদনা না করে পর্যায়ের পরিবর্তনগুলি যুক্ত করুন
  • w শব্দ - HEADএটিতে মঞ্চ পরিবর্তনগুলি না যুক্ত করে এর বার্তাটি পরিবর্তন করুন

আপনি যখন কোনও অঙ্গীকার সম্পাদনা করতে চান যা তা নয় HEAD, তখন উপরেরগুলি কাজ করবে না। এই আদেশগুলি সর্বদা কমিটকে "সংশোধন" করে (অর্থাত্ প্রতিস্থাপন) করে HEAD। গিট কোনও কমিট সংশোধন করার জন্য একটি কমান্ড সরবরাহ করে না এটি ব্যতীত HEADআরও জড়িত।

ম্যাজিট এই জাতীয় কমান্ড সরবরাহ করে তবে এমন পরিস্থিতিতে রয়েছে যেগুলি একাধিক পদক্ষেপে এটি করা ভাল rable তাই আমরা প্রথমে সে বিষয়ে আলোচনা করব।

ব্যতীত অন্য কোন প্রতিশ্রুতি সংশোধন HEADকরে তিনটি ধাপে বিভক্ত করা যেতে পারে:

  1. অস্থায়ীভাবে অন্যান্য প্রতিশ্রুতিবদ্ধ করুন ( A) HEAD
  2. HEAD(উপরে বর্ণিত হিসাবে) সংশোধন করুন , ফলে প্রতিশ্রুতিবদ্ধ A'
  3. গিটকে তারপরে যে কমিটস রয়েছে তা আবার প্রয়োগ করতে বলুন 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


আরও পড়া:


স্ফটিক পরিষ্কার! আপনাকে ধন্যবাদ, দুর্দান্ত প্যাকেজ বিটিডাব্লু।
ম্যাথিউ মার্কস

1
ঠিক আছে, আমি মনে করি আমার উত্তরের দ্বিতীয়ার্ধে কিছু গন্ধযুক্ত অংশ রয়েছে। তবে
এগুলি

এই উত্তর tarsius জন্য ধন্যবাদ, এটি সত্যিই আমার জন্য কাজ করে।
anquegi

এই ব্যাখ্যার প্রথমার্ধের স্পষ্টতা দ্বিতীয়ার্ধটি পড়াকে তোলে, যা অনুসরণ করা বেশ শক্ত, বেশ হতাশার!
লিন হেডলি

git-commitম্যান পেজটিতে git-rebase(1)এই রেখাগুলি পুনঃনির্দেশিত হয় : ভাঁজ করা কমিটের জন্য প্রস্তাবিত প্রতিশ্রুতি বার্তাটি প্রথম কমিটের প্রতিশ্রুতিবদ্ধ বার্তা এবং "স্কোয়াশ" কমান্ডের সমাহার, তবে "ফিক্সআপ" দিয়ে কমিটের প্রতিশ্রুতি বার্তা বাদ দেয় কমান্ড। আইওডাব্লু, আপনি যদি পূর্ববর্তী প্রতিশ্রুতিতে কোডটি ঠিক করতে চান তবে ফিক্সআপটি ব্যবহার করুন, আপনি যদি কমিট বার্তাটিও ঠিক করতে চান তবে স্কোয়াশ ব্যবহার করুন।
ইয়াসুশি শোজি

3

git commit --amend –C HEADআপনি যে গিট কমান্ডটি সন্ধান করতে চান তা হ'ল এবং আপনি ম্যাগিতের মাধ্যমে সংশোধন করতে পারেন C-c C-a


আমি Magit সর্বশেষ ব্যবহার করছি, C-c C-aএটি একটি পুরানো সংস্করণ থেকে এসেছে (আমার মনে হয়)। তদ্ব্যতীত, আমি সহায়তা বাফারে "সংশোধন" করার কোনও চিহ্ন দেখতে পাচ্ছি না ( ?)।
ম্যাথিউ মার্কস

ম্যাজিট ২.x সমতুল্যের জন্য রামির উত্তর দেখুন ।
npostavs

3

সুতরাং একটি কর্মপ্রবাহ হ'ল:

  • আপনার পরিবর্তন করুন
  • সি (কমিট) চ (ফিক্সআপ - আপনার ফিক্সিং কমিট নির্বাচন করুন)

তারপর

  • আর (রিবেস) -এ (অটোস্কোয়া, ডিফল্ট করা যেতে পারে) i (ইন্টারেক্টিভ)

অটোকোয়াশ স্বয়ংক্রিয়ভাবে সমস্ত সরিয়ে নেবে! ফিক্সআপটি সঠিক জায়গায় চলে আসে এবং সেগুলি পুনরায় বেসে স্কোয়াশেড করার জন্য সেট করে।


আমি যে কথাটি বলি নি তা কেবল তোমার প্রথম বুলেট এবং দ্বিতীয়টির মধ্যে মঞ্চস্থ করা। মারার ফলে 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,। এটি কি আমাকে বলার চেষ্টা করছে যে আমার ফিক্সআপটি আসন্ন সংযুক্তিতে ডুবে যেতে পারে?
ম্যাথিউ মার্কস

@ ম্যাথিউমার্কস: "যদি আমার কোনও আপত্তিহীন পরিবর্তন না হয়" - গিট মনে করে আপনি করছেন। নোট করুন বার্তাটি স্টেজেড পরিবর্তনগুলি প্রস্তাব করে, স্টেস্টেড নয় not পুনঃ merge in rebase, বুগের অধীনে দেখুন git help rebase। আমি উপরের দিকে টানানোর আগে ফিক্সআপ করার পরামর্শ দিই।
npostavs

1

শেষ প্রতিশ্রুতির প্রশংসা করার জন্য, এটি "গ এ"। কিছু পুরানো প্রতিশ্রুতির প্রশংসা করার জন্য ফিক্সআপ।


যা কেস, আমি স্পষ্টতার জন্য এ তখন বি।
ম্যাথিউ মার্কস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.