গিট মার্জ আমাদের দ্রুত ফরোয়ার্ড সম্পাদন করার অনুমতি দেয় এবং কোনও দ্রুত ফরোয়ার্ড শাখা মার্জ করে না। দ্রুত ফরোয়ার্ড মার্জ কখন ব্যবহার করবেন এবং কখন দ্রুত ফরোয়ার্ড মার্জটি ব্যবহার করবেন কোনও ধারণা?
গিট মার্জ আমাদের দ্রুত ফরোয়ার্ড সম্পাদন করার অনুমতি দেয় এবং কোনও দ্রুত ফরোয়ার্ড শাখা মার্জ করে না। দ্রুত ফরোয়ার্ড মার্জ কখন ব্যবহার করবেন এবং কখন দ্রুত ফরোয়ার্ড মার্জটি ব্যবহার করবেন কোনও ধারণা?
উত্তর:
--no-ffযখন আপনি আপনার বৈশিষ্ট্য শাখার একটি স্পষ্ট ধারণা করতে চান বিকল্প দরকারী। সুতরাং এর মধ্যে যদি কোনও কমিট না করা হয়, এফএফ সম্ভব হয় - আপনি এখনও মাঝে মাঝে মুখ্য লাইনে প্রতিটি প্রতিশ্রুতি একটি বৈশিষ্ট্যের সাথে মিলিত হতে চান। সুতরাং আপনি একক ইউনিট হিসাবে একগুচ্ছ প্রতিশ্রুতি দিয়ে একটি বৈশিষ্ট্য শাখা আচরণ করেন এবং সেগুলি একক ইউনিট হিসাবে মার্জ করে। আপনার বৈশিষ্ট্যটি যখন শাখার সাথে মার্জ করে তখন এটি আপনার ইতিহাস থেকে স্পষ্ট --no-ff।
আপনি যদি এ জাতীয় বিষয়ে যত্ন না করেন - আপনি যখনই সম্ভব এফএফ থেকে পালাতে পারেন। এইভাবে আপনার আরও বেশি পরিমাণ মতো কর্মপ্রবাহের মতো অনুভূতি হবে।
উদাহরণস্বরূপ, এই নিবন্ধটির লেখক মনে করেন যে --no-ffবিকল্পটি ডিফল্ট হওয়া উচিত এবং তার যুক্তিটি আমি উপরে বর্ণিত যেটির কাছাকাছি:
পরিস্থিতিটি বিবেচনা করুন যেখানে "বৈশিষ্ট্য" শাখায় ধারাবাহিকভাবে নাবালিকা একটি নতুন বৈশিষ্ট্য তৈরি করে: যদি আপনি কেবল "গিট মার্জ বৈশিষ্ট্য_ব্রঞ্চ" ব্যতীত করেন তবে --no-ff"গিট ইতিহাস থেকে দেখা সম্ভব নয় যে কোনটি প্রতিশ্রুতিবদ্ধ বস্তু একসাথে রয়েছে একটি বৈশিষ্ট্য প্রয়োগ করা হয়েছে - আপনাকে সমস্ত লগ বার্তা ম্যানুয়ালি পড়তে হবে a পুরো বৈশিষ্ট্যটি (অর্থাত কমিটের একটি দল) প্রত্যাবর্তন করা সত্যিকারের মাথাব্যথা [যদি --no-ffব্যবহার না করা হয়], তবে --no-ffপতাকাটি ব্যবহার করা থাকলে এটি সহজেই করা হয় [কারণ এটি কেবল একটি অঙ্গীকার]। "
--no-ffআপনার প্রতিশ্রুতিবদ্ধ ইতিহাসের সুবিধাগুলি যেমন মৌলিক সরঞ্জামগুলি ব্যবহার করার সাথে সাথে তত্ক্ষণাত স্পষ্ট না হয়ে যেতে পারে git log, যা আপনার বর্তমান শাখায় একীভূত হয়েছে এমন সমস্ত শাখা থেকে সমস্ত প্রতিশ্রুতি প্রদর্শন অব্যাহত রাখবে। এটি বলেছিল, যেমন git log --first-parentকোনও ইন্টিগ্রেশন শাখায় যেমন developবা ব্যবহার করার সময় সুবিধাগুলি আরও স্পষ্ট হয় master। আপনি যদি ধর্মীয়ভাবে ব্যবহার করেন --no-ffতবে এটি একচেটিয়াভাবে মার্জ অনুরোধগুলি প্রদর্শন git logকরবে , এবং এখনও আরও (আরও) বিস্তৃত ইতিহাস সরবরাহ করবে। এজন্য ভিনসেন্ট এটিকে গিটফ্লো দিয়ে ব্যবহারের জন্য সুপারিশ করেছেন ।
আমি প্রকল্পে সাধারণত দেখা একটি উদাহরণ দিতে পারেন।
এখানে বিকল্প --no-ff(যেমন সত্য মার্জ ) একাধিক পিতামাতার সাথে একটি নতুন প্রতিশ্রুতি তৈরি করে এবং আরও ভাল ইতিহাস ট্র্যাকিং সরবরাহ করে। অন্যথায়, --ff(অর্থাত্ দ্রুত-ফরোয়ার্ড মার্জ ) ডিফল্টরূপে।
$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature' // => commit created at merge with proper message
commit 'finish the feature'
commit 'work from day 2'
commit 'work from day 1'
$ gitk // => see details with graph
$ git checkout -b anotherFeature // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk // => see details with graph
(*) দ্রষ্টব্য যে এখানে যদি newFeatureশাখাটি পুনরায় ব্যবহার করা হয় তবে নতুন শাখা তৈরি করার পরিবর্তে, গিটকে --no-ffযাইহোক মার্জ করতে হবে। এর অর্থ দ্রুত ফরোয়ার্ড মার্জ সর্বদা যোগ্য নয়।
যখন আমরা উন্নয়নের পরিবেশে কাজ করি এবং আমাদের কোডকে স্টেজিং / প্রোডাকশন শাখায় মার্জ করি তখন গিট কোনও দ্রুত ফরোয়ার্ড একটি ভাল বিকল্প হতে পারে না। সাধারণত যখন আমরা একটি একক বৈশিষ্ট্যের জন্য বিকাশ শাখায় কাজ করি তখন আমাদের একাধিক কমিট থাকে। একাধিক কমিটের সাহায্যে ট্র্যাকিং পরিবর্তনগুলি পরে অসুবিধে হতে পারে। আমরা যদি গিটকে দ্রুত না এগিয়ে ব্যবহার করে স্টেজিং / প্রোডাকশন শাখায় মার্জ করি তবে তার কেবল 1 টি কমিট থাকবে। এখন যে কোনও সময় আমরা বৈশিষ্ট্যটি ফিরিয়ে নিতে চাই, কেবল সেই প্রতিশ্রুতিটি ফিরিয়ে দিন। জীবন সহজ।
এটিও সম্ভব যে কেউ ব্যক্তিগত বৈশিষ্ট্যযুক্ত শাখাগুলি রাখতে চান যেখানে কোডটি কেবল দিনের শেষে রাখা হয়। এটি উন্নততর সূক্ষ্ম বিকাশে ট্র্যাক করার অনুমতি দেয়।
আমি নন-ওয়ার্কিং কোড দিয়ে মাস্টার বিকাশকে দূষিত করতে চাই না, সুতরাং --no-ff করা কেবল যা সন্ধান করছে তা হতে পারে।
পার্শ্ব নোট হিসাবে, কোনও ব্যক্তিগতকৃত শাখায় ওয়ার্কিং কোড করা প্রয়োজন হবে না, যেহেতু ইতিহাস git rebase -iঅন্য কেউ সেই একই শাখায় কাজ না করে ততক্ষণ সার্ভারে পুনরায় লেখা এবং জোর করা যেতে পারে ।