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
একটি শাখায় বাছাইয়ের ফলে সংঘাত হয় inD
D*
২.২০ যুগে সি ব্যাক কমান্ডটি পুনরায় লেখার সময় " --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()
ফাংশনে "পুনর্নির্বাচিত যুক্তিটি দ্বি-দ্বীপকে সরান" , যাতে "গিট রিবেস" প্রয়োগের ক্ষেত্রে ফাংশনের অন্য কলার ঠিক একইরকম আচরণ করে এই প্রতিরোধ।