--ontoমুহুর্তের জন্য এড়ানো যাক । upstreamএবং branchবেশ বেসিক, এবং প্রকৃতপক্ষে নকল করা checkoutএবং branch- দ্বিতীয় যুক্তি alচ্ছিক :
git branch <newbranch>
git branch <newbranch> <base>
git checkout -b <newbranch>
git checkout -b <newbranch> <base>
git rebase <upstream>
git rebase <upstream> <branch>
(পাশাপাশি, rebase"আপ স্ট্রিম" এবং "ব্রাঞ্চ" এ এই যুক্তিগুলির নামগুলি খুব বর্ণনামূলক আইএমও নয় I আমি সাধারণত এগুলিকে পীচফ্ট্রির মতোই মনে করি <start>এবং <end>আমি কীভাবে এগুলি ব্যবহার করব git rebase <start> <end>:)
দ্বিতীয় শাখাটি বাদ দেওয়া হলে ফলাফলটি প্রথম সেই শাখাটি পরীক্ষা করে দেখার পরে প্রায় একই রকম হয় যেন আপনি সেই শাখাটি নির্দিষ্ট করেন নি। ব্যতিক্রম হ'ল branchযা আপনার বর্তমান শাখা পরিবর্তন করে না:
git checkout <base> && git branch <newbranch> && git checkout <previous_branch>
git checkout <base> && git checkout -b <newbranch>
git checkout <end> && git rebase <start>
rebaseযখন অনুরোধ করা হয় তখন কী হয় তা বোঝার জন্য , আমি প্রথমে এটি একটি বিশেষ ধরণের মার্জ হিসাবে ভাবা শুরু করেছিলাম। এটি সত্যই নয়, তবে প্রথমে রিবেসটি বোঝার সময় এটি সহায়তা করেছিল। পীচফ্ট্রির উদাহরণ ধার করা:
A--B--F--G master
\
C--D--E feature
এর git merge masterফলাফল:
A--B--F-----G master
\ \
C--D--E--H feature
যখন একটি git rebase master(শাখায় থাকাকালীন feature) এর ফলাফল এর মধ্যে রয়েছে:
A--B--F--G master
\
C'--D'--E' feature
উভয় ক্ষেত্রেই featureএখন উভয় masterএবং এর কোড রয়েছে feature। আপনি যদি চালু না থাকেন featureতবে দ্বিতীয় যুক্তিটি এটিতে একটি শর্টকাট হিসাবে স্যুইচ করতে ব্যবহার করা যেতে পারে: git rebase master featureউপরের মত একই কাজ করবে।
এখন, বিশেষ জন্য --onto। এটির সাথে মনে রাখার জন্য গুরুত্বপূর্ণ অংশটি এটি <start>নির্দিষ্ট না করা হলে ডিফল্ট হয় । সুতরাং উপরে, আমি যদি নির্দিষ্টভাবে --ontoনির্দিষ্ট করে রাখি তবে এর ফলাফলটি একই হবে:
git rebase --onto master master
git rebase --onto master master feature
( মানসিকভাবে পার্স করা সহজ, কারণ আমি --ontoউল্লেখ না করেই ব্যবহার করি না <end>, এমনকি ভেবেছিলাম যে দু'টি ইতিমধ্যে চালু থাকলে একই feature।)
কেন কার্যকর তা দেখার --ontoজন্য এখানে একটি আলাদা উদাহরণ। ধরা যাক আমি চালু ছিলাম featureএবং একটি বাগ লক্ষ্য করলাম, যা আমি তখনই ঠিক করতে শুরু করেছিলাম - তবে ভুলের featureপরিবর্তে ব্রাঞ্চ বন্ধ masterকরে দিয়েছিলাম:
A--B--F--G master
\
C--D--E feature
\
H--I bugfix
আমি যা চাই তা হল এই প্রতিশ্রুতিগুলি "সরানো" bugfixযাতে তারা আর নির্ভর করে না feature। যেমনটি হ'ল, এই উত্তরে উপরে প্রদর্শিত যেকোন ধরণের মার্জ বা রিবেস featureদুটি চুক্তি সহ তিনটি কমিট গ্রহণ করবে bugfix।
উদাহরণস্বরূপ, git rebase master bugfixভুল। এর থেকে সমস্ত কমিটগুলি অন্তর্ভুক্ত করার <start>জন্য পরিসীমা , যা এর উপরে পুনরায় খেলানো হয় :<end>featuremaster
A--B--F--G master
\ \
\ C'--D'--E'--H'--I' bugfix
\
C--D--E feature
আমরা আসলে কী চান থেকে করে পরিসীমা হয় featureথেকে bugfixউপরে গুলোতে করা master। এটাই হচ্ছে --onto- "স্টার্ট" শাখার চেয়ে আলাদা "রিপ্লে" লক্ষ্য নির্দিষ্ট করে:
git rebase --onto master feature bugfix
A--B--F--G master
\ \
\ H'--I' bugfix
\
C--D--E feature