Git থেকে শুরু করে 1.9 / 2.0 চতুর্থাংশ 1 2014, আপনি পুনর্লিখিত মূল প্রজেক্টের শাখা তে এটি rebasing আগে আপনার পূর্ববর্তী শাখা মূল চিহ্নিত করতে, বর্ণনা অনুযায়ী থাকবে না অ্যারিস্টট্ল Pagaltzis এর উত্তর :
দেখুন কমিট 07d406b এবং d96855f কমিট :
এর topicসাথে তৈরি শাখায় কাজ করার পরে git checkout -b topic origin/master, রিমোট-ট্র্যাকিং শাখার origin/masterইতিহাসটি পুনর্নির্মাণ এবং পুনর্নির্মাণ করা হতে পারে যা এই আকারের ইতিহাসের দিকে পরিচালিত করে:
o---B1
/
---o---o---B2--o---o---o---B (origin/master)
\
B3
\
Derived (topic)
যেখানে origin/masterকরে এ বিন্দু ব্যবহৃত B3, B2, B1এবং এখন এটা পয়েন্ট B, এবং আপনারtopic তা ব্যাক যখন শাখা উপরে শুরু হয়েছিল origin/masterছিল B3।
এই মোডটি কাঁটাচামড়া পয়েন্ট হিসাবে সন্ধান origin/masterকরতে রিফ্লগ ব্যবহার করে B3, যাতে topicআপডেটের উপরে পুনরায় স্থাপন করা যায়origin/master :
$ fork_point=$(git merge-base --fork-point origin/master topic)
$ git rebase --onto origin/master $fork_point topic
এজন্য git merge-baseকমান্ডের একটি নতুন বিকল্প রয়েছে:
--fork-point::
<commit>অন্য একটি শাখা (বা কোনও রেফারেন্স) থেকে কোন শাখা (বা কোনও ইতিহাস যা নেতৃত্ব দেয় ) বিন্দুটি সন্ধান করুন <ref>।
এটি কেবল দুটি প্রতিশ্রুতিগুলির সাধারণ পূর্বপুরুষের সন্ধান করে না, বরং ইতিহাসটি শাখার পূর্বের অবতার থেকে চিহ্নিত হয়েছিল কিনা তা দেখার জন্য পুনর্বিবেচনার বিষয়টিও বিবেচনা করে<ref><commit><ref> ।
দ্য "git pull --rebase "কমান্ডটি base" বেস "যে মামলায় মোকাবেলা করার জন্য শাখার কাজ ভিত্তিক ছিল " "শাখার (সাধারণত একটি দূরবর্তী ট্র্যাকিং শাখা) এর রিলগ এন্ট্রি ব্যবহার করে শাখার কাঁটাচামচটি পুনরায় প্রত্যাখ্যান করা হয় শাখাটি পুনর্নির্মাণ এবং পুনর্নির্মাণ করা হয়েছে।
উদাহরণস্বরূপ, যদি ইতিহাসটি এমন দেখায় যেখানে:
- "
base" শাখার বর্তমান টিপটি এখানে রয়েছে Bতবে পূর্বে আনতে হবে যে এর টিপটি ব্যবহৃত হতB3 এবং তারপর B2এবং তারপর B1
, বর্তমান চাওয়ার কমিট আগে ও
- শাখাটি সর্বশেষ "বেস" এর শীর্ষে পুনর্বাসিত হচ্ছে প্রতিশ্রুতি ভিত্তিতে
B3 ,
এটা খোঁজ করে B3এর "আউটপুট চোখ বুলিয়ে git rev-list --reflog base" (অর্থাত B, B1,B2 , B3) পর্যন্ত এটি খুঁজে বের করে একটি কমিট যা বর্তমান অগ্রভাগের একটি পূর্বপুরুষ হল " Derived (topic)"।
অভ্যন্তরীণভাবে, আমাদের কাছে get_merge_bases_many()এটি একসাথে গুনতে পারে।
আমরা এর মধ্যে একটি মার্জ-বেস Derivedএবং একটি কল্পিত মার্জ কমিট চাই যা " base (origin/master)" এর সমস্ত tipsতিহাসিক টিপসকে মার্জ করার ফলে তৈরি হবে ।
যখন এই ধরনের প্রতিশ্রুতি উপস্থিত থাকে, আমাদের একটি একক ফলাফল পাওয়া উচিত, যা " base" এর একটি রিফ্লগ এন্ট্রিগুলির সাথে ঠিক মেলে ।
গিট 2.1 (Q3 2014) এই বৈশিষ্ট্যটিকে আরও শক্তিশালী করে তুলবে : জন কিপিং দ্বারা প্রতিশ্রুতিবদ্ধ 1e0 ড্যাকড দেখুন ( johnkeeping)
আমাদের নিম্নোক্ত টোপোলজি রয়েছে এমন দৃশ্যটি সঠিকভাবে পরিচালনা করুন:
C --- D --- E <- dev
/
B <- master@{1}
/
o --- B' --- C* --- D* <- master
কোথায়:
B'এটির একটি নির্দিষ্ট সংস্করণ Bহ'ল প্যাচ-অভিন্ন নয়B ;
C*এবং D*প্যাচ-অভিন্ন CএবংD যথাযথভাবে এবং যথাক্রমে যদি ভুল ক্রমে প্রয়োগ করা হয় তবে টেক্সটিকভাবে সংঘাত হয়;
E পাঠ্য উপর নির্ভর করে D ।
সঠিক ফলাফলের git rebase master devঅর্থাৎ Bএর কাঁটাচামচ দফা হিসাবে চিহ্নিত করা হয় devএবং master, তাই C, D, Eকরে যে সম্মুখের দিকে গুলোতে করা প্রয়োজন হয় master; কিন্তু Cও Dপ্যাচ-অভিন্ন সঙ্গে আছে C*এবং D*এবং তাই বাদ করা যেতে পারে, যাতে শেষ ফলাফল হল:
o --- B' --- C* --- D* --- E <- dev
যদি কাঁটাচামড়া চিহ্নিত না করা হয়, তবে কোনও সংঘাতের Bফলাফলযুক্ত একটি শাখায় বাছাই করা B'এবং যদি প্যাচ-অভিন্ন কমিটিগুলি সঠিকভাবে সনাক্ত না করা হয় তবে (বা সমতুল্য ) সমেত Cএকটি শাখায় বাছাইয়ের ফলে সংঘাত হয় inDD*
২.২০ যুগে সি ব্যাক কমান্ডটি পুনরায় লেখার সময় " --fork-point" মোডের " git rebase" সঙ্কট ঘটেছিল, যা গিট 2.27 (কিউ 22020) দিয়ে সংশোধন করা হয়েছে।
দেখুন f08132f কমিট দ্বারা (09 ডিসেম্বর 2019) junio সি Hamano ( gitster) ।
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে fb4175b কমিট , 27 মার্চ 2020)
rebase: --fork-pointরিগ্রেশন ফিক্স
সাইন-অফ-বাই: অ্যালেক্স টরোক
[জেসি: করেছে এবং অ্যালেক্সের টেস্ট ব্যবহার করেছে]
সাইন-অফ-জুন: জুনিও সি হামানো
" git rebase --fork-point master" ঠিকঠাক কাজ করত, যেমন এটি অভ্যন্তরীণভাবে "git merge-base --fork-point ঠিকঠাক " যে এটি সংক্ষিপ্ত পুনরায় নামকরণ কীভাবে পরিচালনা করতে পারে এবং অন্তর্নিহিত get_fork_point()ফাংশনটি কল করার আগে এটি সম্পূর্ণ পুনর্নবীকরণের দিকে ঝুলিয়ে রাখে ।
সিটিতে কমান্ডটি পুনরায় লেখার পরে এটি আর সত্য নয়, কারণ এর ইন্টারনাল কলটি সরাসরি করা হয়েছিল get_fork_point() লেখার সংক্ষিপ্ত রেফারাইজড না করে।
"গিট মার্জ-বেস" ব্যবহার করে "গিফ মার্জ-বেস" -র অন্তর্নিহিত get_fork_point()ফাংশনে "পুনর্নির্বাচিত যুক্তিটি দ্বি-দ্বীপকে সরান" , যাতে "গিট রিবেস" প্রয়োগের ক্ষেত্রে ফাংশনের অন্য কলার ঠিক একইরকম আচরণ করে এই প্রতিরোধ।