উত্তর:
আপনি যদি কমান্ডটিতে --preserve-merges
বিকল্পটি (বা এর প্রতিশব্দ, -p
) যুক্ত git rebase -i
করেন তবে গিট ইতিহাসের লিনিয়ারাইজিংয়ের পরিবর্তে রিবেসিংয়ের সময় মার্জগুলি সংরক্ষণ করার চেষ্টা করবে এবং আপনি মার্জ কমিটগুলিও সংশোধন করতে সক্ষম হবেন:
git rebase -i -p HEAD~5
HEAD~5
আপনি যে প্রতিশ্রুতিটি সংশোধন করতে চান তার পিতামাতা কোথায় (সাধারণত sha1 ^)।
--preserve-merges
এখন--rebase-merges
মনে রাখবেন, 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
শুধুমাত্র আদিম কমান্ড ব্যবহার করে অন্য একটি সুন্দর উত্তর - নিটল 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 সেকেন্ড সময় নিয়েছিল!)।
git merge --edit
ইন্টারেক্টিভ বিহীন ক্ষেত্রেও আপনাকে মন্তব্য দেওয়ার অনুমতি দেয়।
git merge --edit --no-ff
আপনি যদি উন্নয়ন শাখায় ছাড় দিয়ে গিটার প্রবাহ অনুসরণ করেন এবং কোনও দ্রুত এগিয়ে না রেখে এতে মার্জ করেন তবে তা কার্যকর হতে পারে।
বর্তমান গিট সংস্করণগুলির জন্য (মাই 2020):
git rebase -i -r <parent>
,
তারপরে সম্পাদকের merge -C ...
সাথে প্রতিস্থাপন করুন merge -c ...
।
এটি রিবেসিংয়ের সময় সম্পাদকটিতে প্রতিশ্রুতি বার্তাটি খুলবে, যেখানে আপনি এটি পরিবর্তন করতে পারবেন।
git rebase -i HEAD~5
কমান্ড সম্পাদক পপ আপ। এটি নির্দিষ্ট কমিটগুলি (এই ক্ষেত্রে তাদের পাঁচটি) তালিকাভুক্ত করে। প্রথম কলামে pick
প্রতিটি প্রতিশ্রুতি রয়েছে । কেবলমাত্র সেই সম্পাদকটির pick
সাথে প্রতিস্থাপন করুন reword
এবং সম্পাদকটি বন্ধ করুন। তারপরে গিট প্রতিটি প্রতিশ্রুতিটির জন্য সম্পাদককে পপআপ করবে যেখানে আপনি পরিবর্তিত pick
হয়েছিলেন reword
এবং আপনাকে প্রতিশ্রুতি বার্তাটি সম্পাদনা করতে দেবেন।
-p
করার git rebase
কমান্ড।
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to