গিটে কোনও শাখা মুছে ফেলা কি ইতিহাস থেকে মুছে ফেলা হয়?


189

এসএনএন থেকে আগত, গিটের সাথে পরিচিত হতে শুরু করে।

যখন কোনও শাখা গিটে মুছে ফেলা হয়, তা কি ইতিহাস থেকে সরানো হয়?

এসএনএন-তে, আপনি মুছে ফেলা অপারেশন (বিপরীত মার্জ) রিভার্ট করে সহজেই একটি শাখা পুনরুদ্ধার করতে পারেন। এসএনএন-তে সমস্ত মুছে ফেলার মতো, শাখাটি কখনই সত্যই মুছে ফেলা হয় না, এটি কেবলমাত্র বর্তমান গাছ থেকে সরিয়ে নেওয়া হয়।

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

উত্তর:


249

শাখাগুলি গিটে যাওয়ার জন্য কেবলমাত্র পয়েন্টার। গিটের প্রতিটি কমিটের একটি সম্পূর্ণ উত্স গাছ রয়েছে, এটি এসএনএন থেকে খুব আলাদা কাঠামো যেখানে সমস্ত শাখা এবং ট্যাগ (কনভেনশন অনুসারে) বিশেষ 'ট্রাঙ্ক' এর পাশাপাশি ভাণ্ডারের পৃথক 'ফোল্ডারগুলিতে' থাকে।

মুছে ফেলার আগে যদি শাখাটি অন্য কোনও শাখায় একীভূত করা হয় তবে প্রথম শাখাটি মুছে ফেলা হলে সমস্ত কমিট অন্য শাখা থেকে এখনও পৌঁছতে পারে। তারা যেমন ছিল ঠিক তেমনই রয়ে গেছে।

যদি শাখাটি অন্য কোনও শাখায় একীভূত না করে মুছে ফেলা হয় তবে সেই শাখায় অঙ্গীকার করা (এখনও অবধি পৌঁছনীয় এমন অঙ্গীকার থেকে কাঁটাচামচ হওয়া পর্যন্ত) দৃশ্যমান হওয়া বন্ধ হয়ে যাবে।

কমিটগুলি এখনও সংগ্রহশালায় ধরে রাখা হবে এবং মুছে ফেলার পরে তা পুনরুদ্ধার করা সম্ভব তবে অবশেষে সেগুলি আবর্জনা সংগ্রহ করা হবে।


3
উত্তর করার জন্য ধন্যবাদ. আপনি "প্রতিটি প্রতিশ্রুতিতে একটি সম্পূর্ণ উত্স গাছ আছে" বলতে আপনার অর্থ কী তা স্পষ্ট করে বলতে পারেন? আমি যেমন এটি বুঝতে পারি, গিটের প্রতিটি প্রতিশ্রুতি ডেল্টাসের একটি সেট যা কোনও সম্পূর্ণ গাছ নয়, পিতামাতার প্রতিশ্রুতিতে ফিরে আসে।
কেন লিউ

2
@ কেন লিউ: একটি প্রতিশ্রুতিতে শূন্য বা আরও বেশি পিতামাতার কমিটস, একটি ট্রি অবজেক্ট এবং কমিট সম্পর্কে কিছু মেটাডেটা রয়েছে contains প্রতিশ্রুতিবদ্ধ, সুতরাং স্বতন্ত্রভাবে একটি দম্পতি উত্স ট্রি উভয় সনাক্ত করে এবং যখন তার পিতামাতার (গুলি) এর বিরুদ্ধে দেখা হয়, তখন এটি পরিবর্তিত হয়েছিল।
সিবি বেইলি

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

22
"শেষ পর্যন্ত তারা আবর্জনা সংগ্রহ করা হবে" - শেষ পর্যন্ত কখন?
BadHorsie

7
@ বাদহর্সি, এটি নির্ভর করে
AliOli

86

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

দ্রষ্টব্য যে git branch -dকোনও শাখা মুছে ফেলতে অস্বীকার করবে যদি এটি নিশ্চিত না করা যায় যে এটি মুছে ফেলা যায় না তবে অ্যাক্সেসযোগ্য কমিটগুলি ছেড়ে যায় না। আপনার git branch -Dকোনও শাখা মুছে ফেলার জন্য জোর করে শক্তিশালী ব্যবহার করতে হবে যদি এটি অ্যাক্সেসযোগ্য কমিটগুলি ছেড়ে যায়।

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

---- ও ---- * ---- * ---- / এম ---- * <- মাস্টার <- হেড
     \ /
      \ --. ---- .-- / - x --- y <- মুছে ফেলা শাখা

কেবল শাখাটি মোছার পরে 'x' এবং 'y' অ্যাক্সেসযোগ্য হবে।

আপনি যদি মুছে ফেলা শাখায় gc.reflogExpireডিফল্ট 90 দিনের মধ্যে অপারেট করেন তবে আপনার কাছে মুছে ফেলা শাখার শেষ টিপটি হেড রিফ্লোগ (রেকর্ড git reflog show HEAD, বা git log --oneline --walk-reflogs HEAD) রেকর্ড করা থাকবে । মোছা পয়েন্টারটি পুনরুদ্ধার করতে আপনার HEAD রেফ্লোগ ব্যবহার করতে সক্ষম হওয়া উচিত। আরও মনে রাখবেন যে এক্ষেত্রে gc.reflogExpireUnreachable, কেবল একটি মুছে ফেলা শাখায় অ্যাক্সেস অযোগ্য কমিটগুলি পিরিয়ডের মধ্যে ছাঁটাই (অপসারণ) থেকে রক্ষা করা হবে , যা ডিফল্টরূপে 30 দিন is

আপনি যদি হেডের জন্য রিফ্লোগুলিতে কেবল মুছে ফেলা শাখার টিপটি খুঁজে না পান, তবে আপনি "অ্যাক্সেস git fsckঅযোগ্য কমিট <sha1>" সন্ধান করার জন্য, এবং মুছে ফেলা শাখার ডগা খুঁজে পেতে ( git show <sha1>বা এর মাধ্যমে git log <sha1>) পরীক্ষা করতে পারেন।

আপনি কীভাবে মুছে ফেলা শাখার টিপটি সন্ধান করেন সে সম্পর্কে স্বাধীন, আপনি মুছে ফেলাটিকে পূর্বাবস্থায় ফেরাতে পারেন, বা ব্যবহার করে কেবল মুছে ফেলা শাখাটি পুনরায় তৈরি করতে পারেন

git branch <deleted-branch> <found-sha1-id>

তবে মনে রাখবেন যে কোনও শাখার জন্য রিফ্লগটি হারিয়ে যাবে।


এছাড়াও git-resurrect.sh স্ক্রিপ্ট রয়েছে contrib/যা প্রদত্ত নাম এবং এটি পুনরুত্থিত (মুছে ফেলা) সহ একটি শাখা টিপের চিহ্ন খুঁজে পেতে সহায়তা করে।


1
অসাধারণ! git reflog show HEADপ্রতিশ্রুতিবদ্ধ তালিকাভুক্ত এবং আপনি যেমন বলেছেন ঠিক ঠিক তেমনই আমি একটি নতুন শাখা তৈরি করেছি।
স্টিভেন আলমারোথ

2

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

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