--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>
feature
master
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