git pull
সম্ভবত প্রতিশ্রুতি তৈরি করছে। আপনি যদি স্থানীয় প্রতিশ্রুতিবদ্ধ হন এবং তারপরে git pull
অন্য কারও কাছে সংগ্রহশালার কাছে প্রতিশ্রুতি দেয়, গিট অন্য বিকাশকারীর প্রতিশ্রুতি ডাউনলোড করে এবং পরে এটি আপনার স্থানীয় শাখায় একীভূত করে।
ভবিষ্যতে এই মার্জ কমিটগুলি কীভাবে এড়ানো যায়
আপনি git pull --rebase
ভবিষ্যতে এটি থেকে রোধ করতে ব্যবহার করতে পারেন , তবে রিবাইজিংয়ের বিপদ রয়েছে এবং আমি pull
পুরোপুরি এড়াতে পরামর্শ দিই ।
পরিবর্তে, আমি আপনাকে এই ব্যবহারের ধরণটি অনুসরণ করতে উত্সাহিত করি:
# download the latest commits
git remote update -p
# update the local branch
git merge --ff-only @{u}
# if the above fails with a complaint that the local branch has
# diverged:
git rebase -p @{u}
ব্যাখ্যা
git remote update -p
দূরবর্তী সংগ্রহস্থলের সমস্ত কমিট ডাউনলোড করে এবং রিমোট ট্র্যাকিং শাখাগুলি আপডেট করে (যেমন, origin/master
)। এটি আপনার কার্যকারী ডিরেক্টরি, সূচক বা স্থানীয় শাখাগুলি স্পর্শ করে না।
-p
যুক্তি আলুবোখারা মূল প্রজেক্টের শাখা মোছা হয়েছে। সুতরাং, যদি foo
শাখাটি origin
ভাণ্ডারে মুছে ফেলা হয় তবে git remote update -p
স্বয়ংক্রিয়ভাবে আপনার origin/foo
রেফ মুছে যাবে ।
git merge --ff-only @{u}
গিটকে প্রবাহিত শাখা ( @{u}
যুক্তি) আপনার স্থানীয় শাখায় একীভূত করতে বলে তবে কেবল যদি আপনার স্থানীয় শাখাটি উজানের শাখায় "দ্রুত ফরোয়ার্ড" করা যায় (অন্য কথায়, যদি এটি ডাইভার্জ না করা থাকে)।
git rebase -p @{u}
আপনার করা কমিটগুলি কার্যকরভাবে সরানো হয়েছে তবে এখনও পর্যন্ত উজানের শাখার শীর্ষে ঠেলে দেওয়া হয়নি, যা আপনি এড়াতে চাইছেন এমন নির্লিপ্ত মার্জ কমিট তৈরির প্রয়োজনীয়তা দূর করে। এটি বিকাশের ইতিহাসের রৈখিকতার উন্নতি করে, পর্যালোচনা করা আরও সহজ করে তোলে।
-p
বিকল্প মার্জ সংরক্ষণে গীত বলে। এটি গিটকে কমিটগুলি পুনর্বাসনের জন্য লিনিয়ারীকরণ থেকে বাধা দেয়। এটি গুরুত্বপূর্ণ যদি উদাহরণস্বরূপ, আপনি কোনও বৈশিষ্ট্য শাখাকে এতে একত্রিত করেছেন master
। ছাড়া -p
, বৈশিষ্ট্য শাখার প্রতিটি প্রতিশ্রুতি master
দ্বারা রৈখিককরণ অংশ হিসাবে নকল করা হবে git rebase
। এটি উন্নয়নের ইতিহাস পর্যালোচনা করা আরও শক্ত করে তুলবে, সহজ নয়।
সাবধানতা : git rebase
আপনি যা আশা করছেন তা নাও করতে পারে, তাই চাপ দেওয়ার আগে ফলাফলগুলি পর্যালোচনা করুন। উদাহরণ স্বরূপ:
git log --graph --oneline --decorate --date-order --color --boundary @{u}..
আমি git pull --rebase
নিম্নলিখিত কারণে এই পদ্ধতির চেয়ে বেশি পছন্দ করি :
- এটি আপনার ইতিহাস সংযুক্ত করার আগে আপনার আগত প্রবাহের কমিটগুলি দেখার অনুমতি দেয় its
- এটি আপনাকে
-p
( --preserve-merges
) বিকল্পটি পাস করার অনুমতি দেয় git rebase
যদি আপনি ইচ্ছাকৃতভাবে মার্জটি পুনরায় চালু করতে চান (উদাহরণস্বরূপ, ইতিমধ্যে ধাক্কা দেওয়া বৈশিষ্ট্য শাখায় মার্জ করা master
)।
সংক্ষিপ্ত: git up
পরিবর্তেgit pull
উপরের কাজটি করা সহজ করার জন্য, আমি একটি উপনাম নামকটি তৈরি করার পরামর্শ দিচ্ছি up
:
git config --global alias.up '!git remote update -p; git merge --ff-only @{u}'
এখন আপনার শাখাটি আপ টু ডেট করার জন্য আপনার যা করা দরকার তা হ'ল:
git up
পরিবর্তে git pull
। আপনার স্থানীয় শাখাটি উজানের শাখা থেকে সরে যাওয়ার কারণে যদি আপনি একটি ত্রুটি পান তবে এটি আপনার পুনর্বাসনের প্রতিশ্রুতি।
না কেন git pull --rebase
?
দৌড়াদৌড়ি অনুসরণ git pull --rebase
করা চলমান সমান । এটি নতুন প্রবাহের কমিটগুলিতে দ্রুত এগিয়ে যাওয়ার চেষ্টা করে, তবে যদি এটি সম্ভব না হয় তবে এটি আপনার স্থানীয় প্রতিশ্রুতিগুলি নতুন প্রবাহের কমিটগুলিতে প্রত্যাবর্তন করবে। এটি সাধারণত ঠিক থাকে তবে সতর্কতা অবলম্বন করুন:git fetch
git rebase
- রিবেস একটি উন্নত বিষয়, এবং আপনার ছাড় দেওয়ার আগে এর অর্থগুলি বোঝা উচিত।
git pull --rebase
প্রতিশ্রুতিগুলি অন্তর্ভুক্ত করার আগে আপনাকে তা পরীক্ষা করার সুযোগ দেয় না। কি মূল প্রজেক্টের পরিবর্তিত উপর নির্ভর করে, এটা বেশ সম্ভব যে রি-বেসের ফলে ভুল অপারেশন-একটি হল rebase --onto
, merge
, reset
, অথবা push -f
একটি প্লেইন চেয়ে বেশি উপযুক্ত হতে পারে rebase
।
--preserve-merges
রিবেস অপারেশনে পাস করা (বর্তমানে) সম্ভব নয় , সুতরাং বৈশিষ্ট্য শাখার যে কোনও ইচ্ছাকৃতভাবে সংহতকরণ বৈশিষ্ট্যযুক্ত শাখার সমস্ত কমিটকে পুনরায় খেলানো (এবং এভাবে ডুপ্লিকেট করা) করা হবে।
দ্বারা নির্মিত একটি বিদ্যমান মার্জ কমিট "ফিক্সিং" git pull
যদি আপনি এখনও দ্বারা নির্মিত কোনও মার্জ কমিটিকে ধাক্কা না দিয়ে থাকেন তবে আপনি মার্জ git pull
কমিটটি পুনরায় চালু করতে পারেন। ধরে নিই যে আপনি কোনও ইচ্ছাকৃত মার্জ করেন নি (যেমন, আপনার বর্তমান শাখায় ইতিমধ্যে ধাক্কা দেওয়া বৈশিষ্ট্য শাখাটি মার্জ করা), নিম্নলিখিতটি করা উচিত:
git rebase @{u}
উপরের কমান্ডটি গিটকে HEAD
(বর্তমান প্রতিশ্রুতি) থেকে প্রাপ্ত অ-মার্জ কমিটগুলি সমস্ত নির্বাচন করতে বলেছে , যে সমস্ত কমিটগুলি @{u}
"আপস্ট্রি শাখা" এর জন্য সংক্ষিপ্ত, অর্থাৎ origin/master
যদি HEAD
হয় master
), পুনরায় খেলুন (চেরি-পিক) ) এগুলি উজানের শাখার শীর্ষে রাখুন এবং তারপরে বর্তমান শাখার রেফারেন্সটি কমিটগুলি পুনরায় খেলানোর ফলাফলের দিকে নির্দেশ করুন। এটি কার্যকরভাবে অ-মার্জ কমিটিকে সাম্প্রতিকতম প্রবাহের প্রতিশ্রুতিতে স্থানান্তরিত করে, যা দ্বারা নির্মিত মার্জটিকে দূর করে git pull
।
আপনার যদি ইচ্ছাকৃত মার্জ কমিট থাকে তবে আপনি দৌড়াতে চান না git rebase @{u}
কারণ এটি অন্য শাখা থেকে সমস্ত কিছু রিপ্লে করবে। এই ক্ষেত্রে মোকাবেলা করা যথেষ্ট পরিমাণে জটিল, এ কারণেই এটি পুরোপুরি ব্যবহার করা git up
এবং এড়ানো ভাল git pull
। আপনার reset
দ্বারা তৈরি করা মার্জটিকে পূর্বাবস্থায় ফেলার জন্য আপনাকে সম্ভবত ব্যবহার করতে হবে pull
এবং তারপরেও করবেন git rebase -p @{u}
। আমার -p
পক্ষে git rebase
নির্ভরযোগ্যভাবে কাজ না করার যুক্তি , যাতে আপনি reset
ইচ্ছাকৃত মার্জটি পূর্বাবস্থায় ফেরাতে, আপনার স্থানীয় শাখায় আপডেট করতে @{u}
এবং ইচ্ছাকৃত মার্জটি পুনরায় করতে চান (যা প্রচুর লোমশ একত্রিত হলে ব্যথা হয়) দ্বন্দ্ব)।