গিট: একটি মার্জ কমিটের বার্তাটি কীভাবে সম্পাদনা / পাঠ্য?


148

আমি কীভাবে মার্জ কমিটের বার্তা সম্পাদনা করব বা শব্দটি পাঠ করব?

git commit --amendএটি শেষ প্রতিশ্রুতিবদ্ধ হয়ে থাকলে ( HEAD) কাজ করে তবে এটি যদি আগে আসে তবে কী হবে HEAD?

git rebase -i HEAD~5 মার্জ কমিটগুলি তালিকা করে না।

উত্তর:


207

আপনি যদি কমান্ডটিতে --preserve-mergesবিকল্পটি (বা এর প্রতিশব্দ, -p) যুক্ত git rebase -iকরেন তবে গিট ইতিহাসের লিনিয়ারাইজিংয়ের পরিবর্তে রিবেসিংয়ের সময় মার্জগুলি সংরক্ষণ করার চেষ্টা করবে এবং আপনি মার্জ কমিটগুলিও সংশোধন করতে সক্ষম হবেন:

git rebase -i -p HEAD~5

1
আমি এটি করেছি তবে আমার পরিবর্তনগুলি করার পরে এবং চেষ্টা করেছি এবং আমার পরিবর্তনগুলি ধাক্কা দিয়েছি আমি এটি পেয়েছি! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to
মার্ক

1
গিট পুশ -f চালানোর চেষ্টা করুন এবং তারপরে আপনার উত্স শাখা। এই কাজ করা উচিত. আমার একই সমস্যা ছিল, কিছু কারণে এটি প্রতারণার একটি নিদর্শন কারণ মূলত যা ঘটেছে তা হ'ল প্রত্যাবর্তনের পরে আপনি একটি বিচ্ছিন্ন হিডের সাথে সমাপ্ত হন, সুতরাং বাহিনীকে এটি ঠিক করতে হবে এবং সবকিছুকে ধাক্কা দেওয়া উচিত।
রাদু কোমনসি

11
@ মার্ক এটি ঘটে কারণ আপনি ইতিমধ্যে প্রেরিত প্রতিশ্রুতিগুলিকে সংশোধন করেছেন। কোনও সার্ভারে জোর করে চাপানো খারাপ অভ্যাস হিসাবে বিবেচিত হয় কারণ এটি আপনাকে এবং আপনার সহকর্মীদের পুরোপুরি নির্মূল করতে পারে। ঠিক আছে, আপনি যদি একা হন তবে সমস্যা হওয়া উচিত নয়।
ইবিজামান

HEAD~5আপনি যে প্রতিশ্রুতিটি সংশোধন করতে চান তার পিতামাতা কোথায় (সাধারণত sha1 ^)।
গ্যাব্রিয়েল ডেভিলার্স 23'19

2
--preserve-mergesএখন--rebase-merges
অরেঞ্জডগ

32

মনে রাখবেন, git1.7.9.6 (এবং git1.7.10 +) শুরু করে git mergeনিজেই সবসময় সম্পাদককে ট্রিগার করে দেবে , আপনার একত্রীকরণে বিশদ যুক্ত করতে।

" git merge $tag" একটি এনোটোটেড ট্যাগকে মার্জ করার জন্য ইন্টারেক্টিভ সম্পাদনা সেশনের সময় সম্পাদকটি সর্বদা খোলে। v1.7.10 সিরিজ পুরানো স্ক্রিপ্টগুলিকে এই আচরণটি হ্রাস করতে সহায়তা করতে একটি পরিবেশ পরিবর্তনশীল GIT_MERGE_AUTOEDIT প্রবর্তন করেছে, তবে রক্ষণাবেক্ষণ ট্র্যাকটিকেও এটি সমর্থন করা উচিত।

এটি GIT_MERGE_AUTOEDITপুরানো স্ক্রিপ্টগুলিকে এই আচরণটি অস্বীকার করতে সহায়তা করতে একটি পরিবেশের পরিবর্তনশীল প্রবর্তন করে।

" প্রত্যাশিত গিট 1.7.10 " দেখুন:

সম্প্রতি গিট মেলিং তালিকার আলোচনায় লিনাস স্বীকার করেছেন (এবং আমি সম্মত হয়েছি) যে গিটের ইতিহাসের প্রথম দিকে আমরা এই নকশাগুলির ভুল করেছি।
এবং 1.7.10 এবং পরবর্তী সময়ে, গিট মার্জ কমান্ড যা একটি ইন্টারেক্টিভ সেশনে চালিত হয় (যেমন এর স্ট্যান্ডার্ড ইনপুট এবং টার্মিনালের সাথে সংযুক্ত এটির স্ট্যান্ডার্ড আউটপুট উভয়ই) একত্রিত করার ফলাফলটি রেকর্ড করার প্রতিশ্রুতি তৈরি করার আগে একটি সম্পাদক খুলবে ব্যবহারকারী একত্রীকরণের ব্যাখ্যা দেওয়ার একটি সুযোগ যেমন গিট কমিট কমান্ডের মতো ব্যবহারকারী ইতিমধ্যে একটি বিবাদযুক্ত মার্জ সলভ করার পরে চালায়।

লিনাস বলেছেন:

তবে প্রকৃতপক্ষে এটি কীভাবে কাজ করে আমি সত্যিই গভীরভাবে চিন্তা করি না - আমার মূল সমস্যাটি হ'ল গিটটি খারাপ মার্জ ম্যাসেজগুলি খুব সহজ করে তোলে।
আমি মনে করি এর অংশটি একটি আরও সহজ বুদ্ধিমান: আমরা এমনকি "গিট সংশ্লেষ" এর জন্য সম্পাদকটিকে পূর্বনির্ধারিতভাবে কখনও জ্বালিয়ে দিই না, তবে আমরা একটি " git commit" এর জন্য করি।
এটি একটি ডিজাইনের ভুল ছিল এবং এর অর্থ হ'ল আপনি যদি একত্রীকরণে কোনও নোট যুক্ত করতে চান তবে আপনাকে অতিরিক্ত কাজ করতে হবে। সুতরাং মানুষ না


নোট করুন যে, গিট 2.17 (Q2 2018) এর আগে " git rebase -p" মার্জ কমিটের ম্যাংলেড লগ বার্তা, যা এখন ঠিক হয়ে গেছে।

দেখুন ed5144d কমিট দ্বারা (08 ফেব্রুয়ারী 2018) গ্রেগরি Herrero ( ``)
প্রস্তাবিত দ্বারা: Vegard Nossum ( vegard) , এবং কোয়ান্টিন ক্যাসনোভাস ( casasnovas)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 8b49408 , 27 ফেব্রুয়ারী 2018)

rebase -p: কল করার সময় ভুল কমিট বার্তা ঠিক করুন git merge

যেহেতু কমেন্ট dd6fb00 (" rebase -p: কল করার সময় উদ্ধৃতি সংশোধন করুন git merge", জানুয়ারী 2018, গিট 2.16.0-আরসি 2), মার্জ কমিট পুনর্বাসিত হওয়ার প্রতিশ্রুতি বার্তা সাবস্কেল সম্পাদনকারী ' git rev-parse --sq-quote' ব্যবহার করে মার্জ কমান্ডে পাঠানো হয়েছে ।

এই সাবশেলের চারপাশে ডাবল কোট প্রয়োজন হয় যাতে git mergeকমান্ডের জন্য নতুন লাইন রাখা হয় ।

এই প্যাচের আগে, নিম্নলিখিত মার্জ বার্তাগুলি:

"Merge mybranch into mynewbranch

Awesome commit."

হয়ে:

"Merge mybranch into mynewbranch Awesome commit."

পরে a rebase -p


গিট ২.২৩ (Q2 2019) এর সাথে " merge -c" চলাকালীন " " নির্দেশিকাতে git rebase --rebase-mergesব্যবহারকারীকে লগ বার্তা সম্পাদনা করার সুযোগ দেওয়া উচিত, অন্যথায় নতুন সংযোজন তৈরি করতে এবং বিদ্যমানটিকে প্রতিস্থাপনের প্রয়োজন নেই (পরিবর্তে দ্রুত-এগিয়ে) ), কিন্তু না।
যা সংশোধন করা হয়েছে।

ফিলিপ উড ( ) দ্বারা 6df8df0 (02 মে 2019) কমিট করুন দেখুন । (দ্বারা একীভূত junio সি Hamano - - মধ্যে কমিট c510261 , 13 জুন 2019)phillipwood
gitster


16

শুধুমাত্র আদিম কমান্ড ব্যবহার করে অন্য একটি সুন্দর উত্তর - নিটল https://stackoverflow.com/a/7599522/94687 দ্বারা :

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

বা আরও ভাল (আরও সঠিক) চূড়ান্ত রিবেস কমান্ড:

git rebase <sha of merge> previous_branch --onto HEAD

বিটিডাব্লু, আদিম কমান্ডগুলি ব্যবহার করে খুব বেশি সিপিইউ না খাওয়ানো এবং গিটকে পুনর্বাসনের জন্য প্রয়োজনীয় git rebase -p -i HEAD^^^^কমান্ডগুলির তালিকা সম্পর্কে চিন্তা করা শেষ না হওয়া পর্যন্ত আপনাকে অজানা সময় অপেক্ষা করার দুর্দান্ত "বৈশিষ্ট্য" থাকতে পারে (যেমন একটি কমান্ড যার ফলস্বরূপ হবে) আমার ক্ষেত্রে আমার ক্ষেত্রে সর্বশেষ হিসাবে একীভূত হওয়ার সাথে কেবলমাত্র সর্বশেষ 4 টির কমিটের একটি তালিকা প্রায় 50 সেকেন্ড সময় নিয়েছিল!)।


2
এটি সত্যিই দরকারী, আমাকে বেশ কিছুটা সময় সাশ্রয় করুন। আমার সংস্থা ভাণ্ডারটিতে কিছু প্রতিশ্রুতিবদ্ধ বার্তাগুলি অবরুদ্ধ করে, যা --ame বা রিবেস কমান্ডের সাহায্যে সহজ তবে: বড় সমস্যা যদি আমরা কিছু শাখাটি আপনার মধ্যে মার্জ করি, কিছু প্রতিশ্রুতিবদ্ধ এবং ধাক্কা দেওয়ার চেষ্টা করি, গিটের ডিফল্ট মার্জ বার্তা অবরুদ্ধ করা হয় ( এটি স্থির করা উচিত, আমি জানি) যা আমাদের সেই বার্তাটি পরিবর্তন করতে বাধ্য করে। এই উত্তর না হওয়া পর্যন্ত আমি সাফল্যের সাথে নয় এমন কমিটের ইতিহাসের মধ্যে একীকরণের বার্তাটি পরিবর্তন করার জন্য অনেক কিছুই চেষ্টা করেছি।
জিওভান্নি সিলভা

2

git merge --edit
ইন্টারেক্টিভ বিহীন ক্ষেত্রেও আপনাকে মন্তব্য দেওয়ার অনুমতি দেয়।

git merge --edit --no-ff আপনি যদি উন্নয়ন শাখায় ছাড় দিয়ে গিটার প্রবাহ অনুসরণ করেন এবং কোনও দ্রুত এগিয়ে না রেখে এতে মার্জ করেন তবে তা কার্যকর হতে পারে।


2

বর্তমান গিট সংস্করণগুলির জন্য (মাই 2020):

git rebase -i -r <parent>,

তারপরে সম্পাদকের merge -C ...সাথে প্রতিস্থাপন করুন merge -c ...

এটি রিবেসিংয়ের সময় সম্পাদকটিতে প্রতিশ্রুতি বার্তাটি খুলবে, যেখানে আপনি এটি পরিবর্তন করতে পারবেন।

( ইঙ্গিতটির জন্য ভনসিকে ধন্যবাদ ।)


0

git rebase -i HEAD~5কমান্ড সম্পাদক পপ আপ। এটি নির্দিষ্ট কমিটগুলি (এই ক্ষেত্রে তাদের পাঁচটি) তালিকাভুক্ত করে। প্রথম কলামে pickপ্রতিটি প্রতিশ্রুতি রয়েছে । কেবলমাত্র সেই সম্পাদকটির pickসাথে প্রতিস্থাপন করুন rewordএবং সম্পাদকটি বন্ধ করুন। তারপরে গিট প্রতিটি প্রতিশ্রুতিটির জন্য সম্পাদককে পপআপ করবে যেখানে আপনি পরিবর্তিত pickহয়েছিলেন rewordএবং আপনাকে প্রতিশ্রুতি বার্তাটি সম্পাদনা করতে দেবেন।


6
এই একত্রীকরণ জন্য কাজ করে না কমিট যদি না আপনার কাছে যোগ -pকরার git rebaseকমান্ড।
পল দাম

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