গিটে শাখাগুলি কখন মুছবেন?


284

মনে করুন আমাদের কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যা স্থিতিশীল।

আগামীকাল, কেউ একটি বড় অল 'বাগ রিপোর্ট করেছেন যা আমরা এখনই হটফিক্স করার সিদ্ধান্ত নিয়েছি। সুতরাং আমরা "মাস্টার" এর বাইরে এই হটফিক্সের জন্য একটি শাখা তৈরি করি, আমরা এর নাম রাখি "2011_হোটফিক্স" এবং আমরা এটির উপরে চাপ দিই যাতে বিকাশকারীরা সবাই এটি ঠিক করার ক্ষেত্রে সহযোগিতা করতে পারে।

আমরা বাগটি ঠিক করেছি এবং "2011_হোটফিক্স "টিকে" মাস্টার "পাশাপাশি বর্তমান বিকাশ শাখায় মার্জ করি। এবং "মাস্টার" টিপুন।

আমরা এখন "2011_হোটফিক্স" দিয়ে কী করব? এটি কি কেবল সময় শেষ না হওয়া পর্যন্ত চিরকালের জন্য একটি শাখা হিসাবে বসে থাকা উচিত বা আমাদের এখন এটি মুছে ফেলা উচিত, যেহেতু এটি তার উদ্দেশ্যটি সম্পাদন করে? এটি কেবল সর্বত্র চারদিকে পড়ে থাকা শাখা ছেড়ে রাখা অশুচি বলে মনে হচ্ছে, কারণ শাখাগুলির তালিকা সম্ভবত খুব দীর্ঘ হয়ে যাবে, যার বেশিরভাগটি এখন পর্যন্ত প্রয়োজনীয়ও নয়।

এটি মুছতে হবে এমন ইভেন্টে এর ইতিহাসের কী হবে? প্রকৃত শাখাটি আর পাওয়া না গেলেও কী তা বজায় রাখা হবে? এছাড়াও, আমি কীভাবে একটি দূরবর্তী শাখাটি সরিয়ে ফেলব?


33
এটি শাখাগুলি প্রায়শই ধারণা হিসাবে ভাবতে সহায়তা করে। থাম্বের মোটামুটি নিয়ম হ'ল আপনি যদি শাখাটি উপস্থাপন করে এমন ধারণাগুলি নিয়ে কাজ করে যাচ্ছেন - পরীক্ষাগুলি সম্পন্ন করে এবং সেই পরিবর্তনগুলি অন্তর্ভুক্ত করে (এগুলিকে মাস্টার হিসাবে একীভূত করা) - আপনি নিজেই শাখাটি সম্পন্ন করেছেন।
ক্যাসাবেল

3
আমি কী জানতে চাই: যদি দূরবর্তী হটফিক্স সরানো হচ্ছে, তবে সহযোগী হওয়া সমস্ত বিকাশকারীদের জন্য কী এটি স্থানীয়ভাবে সরানো হবে? যদি না; কীভাবে এটি সম্পাদন করা যায়? আমি মনে করি যে একজন ব্যক্তি হটফিক্সকে মাস্টার হিসাবে স্থানান্তরিত করতে পারে তবে তার পরে এটি সমস্ত সহযোগীদের জন্য পরিষ্কার করা উচিত, যাতে তাদের শাখায় কমিট যোগ করতে না দেওয়া।
রোল্যান্ডো

1
আপনি আপনার সহকর্মী কম্পিউটারগুলির স্থানীয় ভান্ডারগুলিকে প্রভাবিত করতে পারবেন না। হয় তাকে স্থানীয়ভাবে শাখাটি মুছে ফেলতে বলতে হবে অথবা আপনি যে শাখাটি মুছে রাখতে চান তা ঠেকাতে গিট হুক / শাখা সুরক্ষা সহ এই সার্ভারের
পাশটি প্রয়োগ

উত্তর:


183

আপনি নিরাপদে একটি শাখা মুছে ফেলতে পারেন git branch -d yourbranch। যদি এতে নিমজ্জিত পরিবর্তনগুলি থাকে (যেমন, আপনি শাখাটি মোছার মাধ্যমে প্রতিশ্রুতি হারাবেন), গিট আপনাকে বলবে এবং এটি মুছবে না।

সুতরাং, মার্জ করা শাখাটি মুছে ফেলা সস্তা এবং আপনাকে কোনও ইতিহাস হারাতে দেবে না।

একটি দূরবর্তী শাখা মুছতে, ব্যবহার করে git push origin :mybranch, ধরে নিবেন যে আপনার দূরবর্তী নামটি উত্স এবং আপনি যে দূরবর্তী শাখাটি মুছতে চান তার নাম দেওয়া হয়েছে মাইব্র্যাঞ্চ।


35
"মার্জ করা শাখা মুছে ফেলা সস্তা" তবে এটি প্রায় রাখে keeping সময় বা স্পেস গিট ব্যবহারের ক্ষেত্রে কোনও উল্লেখযোগ্য পারফরম্যান্স নেই, যদি আপনি এটি প্রায় রাখেন। এটি বলেছিল, আমি শাখাটি মুছে ফেলব কারণ সমস্ত কমিটগুলি ইতিমধ্যে ইতিমধ্যে ইতিহাসে রয়েছে master, সুতরাং এটি জিনিসগুলিকে আরও পরিষ্কার করে তোলে।
ম্যাট্রিক্সফ্রোগ

22
শাখাগুলি মুছতে চাওয়ার আমার একটি কারণ হ'ল: আমরা শাখাগুলিতে প্রচুর পরিবর্তন করি (আসলে সমস্ত পরিবর্তন) সুতরাং অবশেষে 'গিট ব্রাঞ্চ' কমান্ডটি ব্যবহার করার পরে আপনি একটি দীর্ঘ তালিকা পাবেন। ওভারভিউয়ের জন্য, আমি সেই তালিকাটি ছোট করতে চাই। সুতরাং পুরানো শাখা মুছে ফেলা হবে। রিলে রিলিজগুলি ট্যাগ করা হয়, তাই আমার পক্ষে এই বিভেদে নেই।
michel.iamit

7
আমি ইতিমধ্যে মার্জ হওয়া শাখাগুলি মুছে ফেলার সাথে একমত হয়েছি, আপনি যদি আপনার বর্তমান শাখায় একীভূত হয়নি এমন শাখাগুলির একটি তালিকা দেখতে চান তবে আপনি ব্যবহার করতে পারেন: গিট শাখা
lsklyut

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

1
--no-mergedডিফল্ট করার আদেশ কি ? আমি চেষ্টা করেছিলাম git config --global --add branch.noMerged trueএবং এটি যুক্ত করা হয়েছিল তবে এতে কোনও পার্থক্য হয়নি।
ক্রেগ সিলভার

55

আপনাকে যা করতে হবে তা হ'ল আপনার প্রকাশিত কোনও কিছু ট্যাগ। আপনি যখন সক্রিয়ভাবে বিকাশ করছেন তখন চারদিকে শাখা রাখুন।

এর সাথে পুরানো শাখা মুছুন

git branch -d branch_name

তাদের সাথে সার্ভার থেকে মুছুন

git push origin --delete branch_name

বা পুরাতন বাক্য গঠন

git push origin :branch_name

যা "শাখার_নামে কোনও কিছুকে উত্স অনুসারে চাপ নাও" বলে লেখা হয়।

এটি বলেছিল, যতক্ষণ না ডিএজি (নির্দেশিত অ্যাসাইক্লিক গ্রাফ) এটি নির্দেশ করতে পারে, কমিটগুলি ইতিহাসে থাকবে।

গুগল "গিট-ফ্লো" এবং এটি রিলিজ ম্যানেজমেন্ট, ব্রাঞ্চিং এবং ট্যাগিং সম্পর্কে আরও কিছু অন্তর্দৃষ্টি দিতে পারে।


31

যেহেতু প্রশ্নের "গিথুব" ট্যাগ রয়েছে, আমি এটি যুক্ত করব: বিশেষ করে গিথুবগুলিতে , আপনি যদি একটি শাখা টানতে অনুরোধ করেন এবং এটি মার্জ হয়ে যায় (হয় ইউআই এর মাধ্যমে বা পুলের অনুরোধের শাখাটি মার্জ করে), আপনি পাবেন না আপনি শাখা অপসারণ করেও , টান অনুরোধ ডেটা (মন্তব্য সহ) হারাবেন ।

এর পরিণতি: আপনি যদি নিজের কর্মপ্রবাহের অংশ হিসাবে টানতে অনুরোধগুলি অন্তর্ভুক্ত করেন (যা কোড পর্যালোচনার সাথে মিষ্টি মিশ্রিত করে) তবে শাখাগুলি মার্জ হওয়ার সাথে সাথে আপনি নিরাপদে মুছতে পারেন। এটি এতটাই সাধারণ যে সম্প্রতি আপনি গিথুব একটি (মিষ্টি) বৈশিষ্ট্য যুক্ত করেছেন যা আপনি একটি পুলের অনুরোধটি মার্জ করার পরে ঠিক "মুছা" মুছুন বোতামটি পপ করে।

তবে এটি লক্ষণীয় যে প্রতিটি গ্রুপের উচিত এমন কর্মপ্রবাহটি গ্রহণ করা উচিত যা এটির পক্ষে সবচেয়ে বেশি উপযুক্ত (এবং এটি এই জাতীয় শাখাগুলি মুছতে পারে বা নাও পারে)। আমার বর্তমান কাজের দল, উদাহরণস্বরূপ, তাদের শাখার অনুরোধগুলি মার্জ হওয়ার সাথে সাথে মাস্টার বা স্থাপনা সম্পর্কিত নয় এমন সমস্ত শাখা ছাঁটাই করে তোলে (যেমন, উত্পাদন, স্টেজিং ইত্যাদি), এবং এখনও কীভাবে সম্পর্কিত কমিটস গঠন হয়েছিল তার পুরো ট্র্যাকিং আমাদের রয়েছে we প্রতিটি পণ্য প্রতিটি ক্রমবর্ধমান উন্নতি।

অবশ্যই কোনও ইতিহাস পরিচালনার (অনুরোধগুলি টানুন বা অন্যথায়) সংস্করণগুলির যথাযথ ট্যাগিংয়ের পরিবর্তে (যা আপনি একই সরঞ্জাম / স্ক্রিপ্টের সাথে স্বয়ংক্রিয়ভাবে ব্যবহার করেন যা কোনও সংস্করণ স্থাপন করে / প্যাকেজগুলি সরবরাহ করে), তাই আপনার ব্যবহারকারীরা যা কিছু ঘটুক না কেন আপনি সর্বদা দ্রুত স্যুইচ করতে পারেন can একটি নির্দিষ্ট মুহুর্তে ট্যাগিং আপনার মূল সমস্যাটি সমাধানের মূল চাবিকাঠি: আপনি যদি প্রতিষ্ঠা করেন যে "কাজ" শাখায় একত্রীকৃত কোনও শাখা মুছে ফেলা হতে পারে এবং মুছে ফেলা উচিত এবং সংস্করণ ট্যাগ, "উত্পাদন" ইত্যাদিতে একত্রিত হওয়া যে কোনও একটি হওয়া উচিত নয় , ভবিষ্যতের সংস্করণে সংহত না হওয়া পর্যন্ত আপনার কাছে হটফিক্সগুলি সর্বদা জীবিত থাকবে।


2
কেন গিতুব আমাকে "শাখা মুছুন" বোতামটি দেখিয়েছিলেন তা বোঝানোর জন্য ধন্যবাদ Thanks
টড ওভেন

আমরা সোর্স ট্রি ব্যবহার করছি এবং এটি স্থানীয় হটফিক্স শাখা এবং রিমোট হটফিক্স শাখা উন্মুক্ত রাখার বিকল্প দেয়। আমি ভেবেছিলাম যে হটফিক্স শাখা বন্ধ করার অর্থ এটি মুছে ফেলা এবং আপনি এটি পুনরায় ব্যবহার করতে পারবেন না। উদাহরণস্বরূপ, আমাদের আগামী 5 দিনের জন্য হট ফিক্সগুলি প্রতিদিন ধাক্কা দিতে হবে। তারপরে আমরা এটি বন্ধ করি। তবে 6th ষ্ঠ দিনে বলি, আমাদের আরও একটি হটফিক্স দরকার। আমরা কি নতুন হটফিক্স শাখা তৈরি করব?
বিপদ 14

এটি সাধারণত লোকেরা করে। যদি স্বতন্ত্রভাবে তাদের নামকরণ অপরিহার্য হয়, তবে আপনি সেই দিনের উপর ভিত্তি করে বা টিকিট ব্যবস্থার রেফারেন্সের ভিত্তিতে তাদের নামকরণ করতে পারেন যা তাদের পরিচালনা করে (যদি থাকে)। অবশ্যই, গিট ওয়ার্কফ্লোগুলি "আপনার দলের পক্ষে সবচেয়ে ভাল কাজ করে" ভিত্তিতে প্রয়োগ করার কথা, তাই আপনি আলাদাভাবে কাজ করার সিদ্ধান্ত নিলে চিন্তিত হবেন না don't
দাবা

7

আমি যুক্ত করব শাখাগুলি মুছে ফেলার অসুবিধা হ'ল আপনি গিটিহাবের সেই শাখাগুলিতে কোনও হাইপারলিঙ্কগুলি ভেঙে ফেলবেন (এই প্রশ্নটি গিথুবকে ট্যাগ করা হয়েছে)। আপনি 404 Not Foundএই লিঙ্কগুলির জন্য একটি ত্রুটি পাবেন । এই কারণেই আমি গিটহাবের কোনও শাখা মুছে ফেলার পরে কোনও প্রতিশ্রুতি বা ট্যাগের প্রতি আমার লিঙ্কগুলি পরিবর্তন করি।

কিছু লিঙ্ক পরিবর্তন করা যায় না, যেমন ইমেলের মতো, আমি এখন পুরোপুরি গিটহাব শাখায় হাইপার লিঙ্কিং এড়াতে এবং প্রথম দিন থেকে কোনও প্রতিশ্রুতি বা ট্যাগের লিঙ্ক করেছি।

আমি শাখাগুলিতে মার্জ হওয়ার পরে মুছতে পছন্দ করি This এটি আপনার সংগ্রহশালার শাখাগুলির দীর্ঘ তালিকার ভিজ্যুয়াল ক্লাটারকে বাধা দেয়। এই শাখাগুলি সংগ্রহস্থলের সমস্ত কাঁটাচামচগুলিতেও প্রচারিত হয়।

প্রথমে আমি আমার স্থানীয় শাখাটি মুছব। এটি এটিকে পরে দুর্ঘটনাক্রমে ঠেকানো থেকে বাধা দেয়।

git branch -d branchName

তারপরে আমি রিমোট ট্র্যাকিং শাখাটি মুছুন

git branch -dr remoteName\branchName

তারপরে আমি গিটহাবের শাখাটি মুছব। আমি ওয়েব ইন্টারফেস ব্যবহার করি, তবে সমমানের কমান্ডটি নীচে।

git push remoteName :branchName

এমনকি যদি শাখাটি কখনও মার্জ না করা হয় তবে সাধারণত আমি এখনও কমিটগুলি উত্তরবংশের জন্য রাখতে চাই। তবে আমি এখনও শাখাটি মুছতে চাই। চারপাশে কমিটগুলি ছড়িয়ে দিতে এবং তাদের আবর্জনা সংগ্রহকারী দ্বারা খাওয়া থেকে বাঁচানোর জন্য, আমি মুছে ফেলা শাখার মতো একই প্রতিশ্রুতিতে নির্দেশ করে একটি টিকা দেওয়া ট্যাগ করি।

git tag -a tagName commitOrBranchName

তারপরে আমি ট্যাগটি গিথুবে চাপলাম

git push remoteName tagName

আবর্জনা সংগ্রহকারী কখন শাখার কমান্ড খায়? শাখাটি মুছে ফেলার আগে আপনার কি ট্যাগ ট্যাগ এবং ধাক্কা দেওয়ার দরকার আছে?
জারেড থার্স্ক


4

দেখে মনে হচ্ছে আপনি 2011_Hotfixশাখাটির ইতিহাস না হারিয়ে মুছতে চান । আমি প্রথমে মুছে ফেলা এবং ইতিহাস দ্বিতীয় বিষয়ে আলোচনা করব।

স্বাভাবিক gitশাখা মোছার পদ্ধতিগুলি ইতিমধ্যে উপরে বর্ণিত হয়েছে, এবং তারা প্রত্যাশা অনুযায়ী কাজ করে। gitএকটি বা দুটি শব্দের আদেশ নেই যার অর্থ, "আরে git, স্থানীয় এবং দূরবর্তী উভয় শাখা মুছুন"। তবে এই আচরণটি শেল স্ক্রিপ্টের মাধ্যমে নকল করা যায়। উদাহরণস্বরূপ, জ্যাচ হলম্যানের শেল স্ক্রিপ্টটি 'গিট-নুকে' নিন । এটি খুব সহজ:

#!/bin/sh
git branch -D $1
git push origin :$1

git-nukeএটি আপনার $PATHডিরেক্টরিগুলির একটিতে একটি এক্সিকিউটেবল ফাইলের (উদাহরণস্বরূপ ) রাখুন । আপনি যদি 2011_Hotfixশাখায় না থাকেন তবে আপনি কেবল চলমান git-nuke 2011_Hotfixস্থানীয় এবং দূরবর্তী উভয় শাখা মুছে ফেলবেন। এটি স্ট্যান্ডার্ড gitকমান্ডগুলির চেয়ে অনেক বেশি দ্রুত এবং সহজ - যদিও সম্ভবত আরও বিপজ্জনক ।

ইতিহাস সংরক্ষণ সম্পর্কে আপনার উদ্বেগ ভাল one এই ক্ষেত্রে, আপনার উদ্বিগ্ন হওয়ার দরকার নেই। একবার আপনি একত্রীকরণ 2011_Hotfixসম্মুখের masterথেকে সব করে 2011_Hotfixযোগ করা হবে master'র ইতিহাস কমিট। সংক্ষেপে, আপনি একটি সাধারণ মার্জ থেকে ইতিহাস হারাবেন না।

আমার যুক্ত করার জন্য আরও একটি শব্দ রয়েছে যা সম্ভবত আপনার প্রশ্নের ক্ষেত্রের বাইরে, তবে এটি প্রাসঙ্গিক। আসুন কল্পনা করুন যে 20 টি ক্ষুদ্র, "ওয়ার্ক-ইন-প্রগ্রেস" কাজ করে 2011_Hotfix; তবে আপনি যদি শুধুমাত্র একটি সম্পূর্ণ করতে কমিট চান 2011_Hotfixজোড়া যেতে পারে master'র ইতিহাস। ছোট 20 টি কমিটকে আপনি কীভাবে একটি বড় কমিটের সাথে সংযুক্ত করবেন? ভাগ্যক্রমে, gitআপনাকে একাধিক অঙ্গীকারকে একীকরণের মাধ্যমে একীকরণের অনুমতি দেয় git-rebase। আমি এখানে ব্যাখ্যা করব না যে এটি কীভাবে কাজ করে; যদিও আপনি যদি আগ্রহী হন তবে এর জন্য ডকুমেন্টেশনটিgit-rebase দুর্দান্ত। মনে রাখবেন যে git rebaseইতিহাস পুনর্লিখন করে, তাই এটি ন্যায়বিচারের সাথে ব্যবহার করা উচিত, বিশেষত যদি আপনি এটিতে নতুন হন। শেষ অবধি, আপনার 2011_Hotfixদৃশ্যটি কোনও একক দেব নয়, একটি ডেভ দল সম্পর্কে। যদি প্রকল্প দলের সদস্যরা ব্যবহার করেনgit rebase, দলের পক্ষে git rebaseকিছু গরুপাল দেবতা অজান্তে কোনও প্রকল্পের gitইতিহাস ক্ষতিগ্রস্থ করতে না পারে সেজন্য দলের পক্ষে সুস্পষ্ট নির্দেশিকা থাকা বুদ্ধিমানের কাজ ।


3

যদি এটি সফলভাবে ফিরে একীভূত হয়ে থাকে এবং এমনকি ট্যাগ হয় তবে আমি বলব এটির আর কোনও ব্যবহার নেই। সুতরাং আপনি নিরাপদে করতে পারেন git branch -d branchname


2

আপনি যদি উত্স থেকে সরানো স্থানীয় শাখাগুলি ছাঁটাই করতে চান তবে ব্যবহারের সময় আপনি ছাঁটাইও করতে পারেন git fetch

git fetch --prune

0

আপনি গিথুব, বিটবকেটের মতো সমস্ত বড় ওয়েব ইউআইতে শাখাগুলি মুছতে পারেন। অনলাইনে শাখাটি মোছার পরে, আপনি স্থানীয় শাখাটি ব্যবহার করে মুছতে পারেন

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