আমি কী দ্রুত গতিতে ডিফল্টরূপে ফরওয়ার্ডিং বন্ধ করে দিতে পারি?


263

আমি কখনই সেই সময়ের কথা ভাবতে পারি না যখন আমি কমিটিকে প্রদর্শন করার git mergeচেয়ে বরং ব্যবহার করব git rebaseএবং চাই না । ডিফল্টরূপে দ্রুত ফরওয়ার্ডিং বন্ধ রাখতে গিটটি কনফিগার করার কোনও উপায় আছে কি? একটি --ffবিকল্প রয়েছে বলে মনে হচ্ছে এটি একটি উপায় আছে তবে এটি নথিতে পাওয়া যায় না।


3
আমি mergeশাখাগুলির জন্য সমস্ত সময় ব্যবহার করি যখন তাদের দ্রুত-ফরওয়ার্ড করার জন্য তাদের রিমোটটি বন্ধ করার কোনও কমিট করেনি। এটি করা সহজ এবং নিরাপদ উপায় বলে মনে হচ্ছে। আমি কৌতূহলী, আপনার অবশ্যই একটি ব্যবহারের কেস আছে। যেখানে শাখার একপাশে কোনও কমিট নেই সেখানে আপনি কেন কখনও মার্জ কমিট তৈরি করতে চান?
সিবি বেইলি

12
কমিটের যৌক্তিক গোষ্ঠী তৈরি করতে আমি শাখা ব্যবহার করি। সুতরাং আমি যদি একত্রীকরণ করি তবে মূলত "এই প্রতিশ্রুতিগুলি একসাথে যায়" বলার উপায় way আপনি একে প্রায় একজন দরিদ্র ব্যক্তির ইন্টারেক্টিভ রিবেস এবং স্কোয়াশ হিসাবে ভাবতে পারেন। :-)
জেসন বেকার

13
দ্রুত ফরওয়ার্ডিং বন্ধ করা অত্যন্ত কার্যকর, বিশেষত যখন সফল গিট
ব্রাঞ্চিং

2
দয়া করে এর জন্য গৃহীত উত্তরটি এরিক প্লাটনের উত্তর stackoverflow.com/a/6810687/3408 এ পরিবর্তন করুন - আমি গৃহীত উত্তরের পদক্ষেপগুলি করেছি, তখন বুঝতে পেরেছিলাম যে এটি কেবলমাত্র বর্তমান সংগ্রহস্থলের মাস্টার শাখার জন্য, যা নির্বোধ।
rjmunro

3
@ jpmc26 প্রত্যেকের নিজস্ব ধারণা। আমি এই নিবন্ধটির সাথে একমত নই। একীভূত প্রতিশ্রুতিবদ্ধ হওয়ার জন্য দুটি পিতামাতার সন্ধান করা কঠিন নয় এবং পরিবর্তনগুলি কী হয়েছিল তা আপনাকে বলে tells তারপরে আপনি এই পরিবর্তনগুলি গ্রহণ করতে পারেন এবং অন্য কোনও শাখায় "পুনরায় চালু" করতে পারেন। ফ্ল্যাট মডেলটির সাথে আপনাকে ম্যানুয়ালি খুঁজে পেতে এবং চেরি বাছাই করতে হবে। আমরা শাখা প্রশাখার আলিঙ্গন চয়ন। নিশ্চিত যে এটি সম্পূর্ণ গাছের দিকে তাকানোর সময় জটিল তবে এটি বাস্তবতা, সমান্তরালভাবে একাধিক পরিবর্তন ঘটে। সবকিছুর চাটুতা আসলে কী ঘটেছিল তা গোপন করে।
স্টিইনিবট

উত্তর:


282

হ্যাঁ, আছে --no-ff। আপনি প্রতি শাখায় মার্জ বিকল্পগুলি কনফিগার করতে পারেন, যেমন

git config branch.master.mergeoptions  "--no-ff"

আপনার $(REPO)/.git/configফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:

[branch "master"]
    mergeoptions = --no-ff

পাদটীকা: আমার অভিজ্ঞতার কথা বলতে গিয়ে অবশেষে আমি খুঁজে পেয়েছি দ্রুত অগ্রসর হওয়া বন্ধ করা বেশিরভাগই গিট নতুনদের জন্য সহায়ক - তবে একবার যদি কর্মপ্রবাহ এবং ধারণাগুলির অনুভূতি আপনার মধ্যে ডুবে যেতে শুরু করে তবে অবশ্যই আপনার লগ গ্রাফটি অস্পষ্টভাবে একত্রিত করার জন্য আপনার লগ গ্রাফটি অস্পষ্ট করা এড়াতে চান রিমোট .. ব্লারফ 'টাইপ কমিট করে।

পাদটীকা 2, এক দশক পরে: নীচের অন্যান্য উত্তরগুলি আরও আধুনিক কনফিগারেশন বিকল্পগুলি সরবরাহ করে, তবে সত্যই, আপনি সম্ভবত এই দিন এবং যুগে ডিফল্ট (অর্থাত্ দ্রুত-ফরোয়ার্ড) এর সাথে থাকতে চান, কারণ খালি একত্রিত হওয়া-কেবলমাত্র কেবল ইতিহাসকে যুক্তিযুক্ত করা আরও অনেক কঠিন করে তুলুন।


142
গিট শেখা কিছুটা পর্বত আরোহণের মতো; তবে ছোট ছোট খাড়া দিয়ে শুরু করার পরিবর্তে এবং আরও শক্ত হয়ে উঠার পরিবর্তে গিট আপনাকে একই পর্বতটিকে বারবার আরোহণ করে তোলে, প্রতিবারই বিভিন্ন উচ্চতায় পড়ে যায়, প্রতিবারই আশ্চর্য হয়ে যায় যে লাইফলাইনটি সংযুক্ত ছিল না।
conny

12
@ থমাস: হ্যাঁ; git pullহয় git fetch+ git merge
মিশেল টিলি

9
এটি দেখতে দুর্দান্ত দেখাচ্ছে, তবে প্রতিটি শাখার জন্য এটি স্থাপন করার পরিবর্তে সমস্ত শাখার জন্য বিশ্বব্যাপী এটি করার কোনও উপায় আছে কি?
বুউইনটন

33
ড্রাগন থেকে সাবধান। @ থমাস যেমন বলেছিল ঠিক তেমনই এই বিকল্পটি বিপজ্জনক ... প্রতিটি গিট টানাই মার্জ কমিট তৈরি করে। গিট টান --ff গিট কনফিগারেশনে মার্জেশনগুলি = নো-এফএফকে ওভাররাইড করে না।
ডালিবোর ফিলাস

15
আমি কি শুধু টাইপ করে ক্লান্ত হয়েছি git merge --no-ff (branchname)? এবং আমি git pullএটি সবসময় আছে হিসাবে কাজ করতে চান ?
ডগওয়েদার

341

থ্রেডে এখনও একটি মুলতুবি প্রশ্ন রয়েছে বলে মনে হচ্ছে: এটি বিশ্বব্যাপী কীভাবে করবেন (অর্থাত্ সমস্ত শাখার জন্য)? রেকর্ডগুলির জন্য, আমরা নিম্নলিখিতগুলি ব্যবহার করতে পারি:

git config --add merge.ff false

... এটি বর্তমান সংগ্রহস্থলের সমস্ত শাখায় প্রয়োগ করার জন্য। এটিকে সমস্ত সংগ্রহস্থলের সমস্ত শাখায় প্রয়োগ করার জন্য যেখানে কেউ এটির বিকল্প ছাড়াই চালাচ্ছেন না--global (স্থানীয় সেটিংস ওভাররাইড গ্লোবাল) এটি চালান:

git config --global --add merge.ff false

ডকুমেন্টেশন থেকে :

merge.ff
ডিফল্টরূপে, বর্তমান কমিটের বংশধর এমন প্রতিশ্রুতি মার্জ করার সময় গিট কোনও অতিরিক্ত মার্জ কমিট তৈরি করে না। পরিবর্তে, বর্তমান শাখার টিপটি দ্রুত-ফরওয়ার্ড। যখন মিথ্যাতে সেট করা থাকে, এই পরিবর্তনশীলটি গিটকে এমন ক্ষেত্রে অতিরিক্ত ক্রিট কমিট তৈরি করতে বলে ( --no-ffকমান্ড লাইন থেকে বিকল্পটি দেওয়ার সমতুল্য )। যখন কেবল সেট করা থাকে, কেবলমাত্র এইমাত্র দ্রুত-ফরোয়ার্ড মার্জগুলি অনুমোদিত হয় ( --ff-onlyকমান্ড লাইন থেকে বিকল্প দেওয়ার সমতুল্য )।


18
দ্রষ্টব্য: merge.ffগিট 1.7.6 এ চালু হয়েছিল। এটি পুরানো সংস্করণগুলিতে কার্যকর নয়।
ক্রিস জনসেন

2
Git 1.7.6 ব্যবহার করা লোকদের জন্য, এটি সেরা এবং সহজ সমাধান।
রায়ান লুন্ডি

22
আমি এটি একটি উপনামের সাথে একসাথে ব্যবহার করছিpuff = "pull --ff --ff-only"
স্টিগি

11
থেরেস এছাড়াও (এখন, git-scm.com/docs/git-config দেখুন ) অপশন পুল.এফ যা কেবলমাত্র সেট করা যেতে পারে , যা ওরফে হিসাবে একই কাজ করবে।
জোটোমো

1
ধন্যবাদ, জোটোমো। এই বৈশিষ্ট্যটি গিট ভি ২.০.০ থেকে উপলব্ধ (কমিট বি814da891e8261b909fc5d9fb07b4e8b13989c2d থেকে)।
এরিক প্লাটোন

14

উত্তরের থ্রেড পড়া আমি নিম্নলিখিত দুটি বিকল্প ব্যবহার করে শেষ করেছি

git config --global pull.ff only # Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global merge.ff false # even create extra merge commit when fast forward merge would be possible

কেবল শিথিলভাবে সম্পর্কিত আমি এই সেটিংটি টানার সময় ঝামেলা এড়ানোর বিষয়টিও পেয়েছি

git config --global pull.rebase true # set up pull to rebase instead of merge

1
গিট কনফিগারেশন - গ্লোবাল পুল.রেবাস সত্য # নোটিশটি 'লাইনের শেষে'
zowers

ধন্যবাদ @ জোয়ার্স আমি এটি স্থির করেছি
বেসটিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.