পুরানো গিট কমিটস সরান


89

আমি গিটে খুব নতুন, এবং ভাবছিলাম যে এরকম কিছু সম্ভব কিনা?

>git log --pretty=oneline --abbrev-commit
2f05aba Added new feature
3371cec Fixed screw up    <-- I want to remove this
daed25c Screw up          <-- and remove this.
e2b2a84 First.                So it's like they never happend.

এটা কি সম্ভব?

উত্তর:


63

এটি দিয়েই সম্ভব git rebase। নিম্নলিখিত চেষ্টা করুন

git rebase -i HEAD~4

এবং তারপরে, আপনার সম্পাদকের ইন্টারেক্টিভ নির্দেশাবলী অনুসরণ করুন। প্রথম পদক্ষেপে আপনি "স্কোয়াশ" কমিট করেন। এটি দেখতে কিছু দেখতে হবে:

pick 2f05aba ... will be preserved
squash 3371cec ... will be squashed with daed25c
squash daed25c ... will be squashed with e2b2a84
pick e2b2a84 .. will contain this and 3371cec and daed25c

দ্বিতীয় ধাপে আপনি অঙ্গীকার বার্তা সম্পাদনা করতে পারেন।


27
কমিটসকে স্কোয়াশ করার চেয়ে মুছে ফেলার প্রশ্নটি কি নয়?
রিচার্ড

4
@ স্টোনি: আচ্ছা, আপনি সম্ভবত এগুলি মুছতে পারেন। তবে ওপি ("স্ক্রু আপ" এবং "ফিক্সড স্ক্রু আপ") এর প্রতিশ্রুতিবদ্ধ মন্তব্যগুলি থেকে আমি ধরে নিয়েছি যে একজন অপরজনকে পূর্বাবস্থায় ফেলা হচ্ছে এবং আপনি কেবল দুটিটিকে স্কোয়াশ করতে পারেন।
দেভ

85

আপনি যদি সত্যিই এগুলি মুছতে চান (ইতিহাস থেকে এগুলি মুছুন, আর কখনও দেখা যায় না), আপনি পারেন

রিবেস চালান:

git rebase -i HEAD~4

এবং তারপরে, আপনি মুছে ফেলতে চান এমন কমিটগুলির সাথে সম্পর্কিত লাইনগুলি মুছুন (বা মন্তব্য করুন):

pick 2f05aba ... #will be preserved
#pick 3371cec ... #will be deleted
#pick daed25c ... #will be deleted
pick e2b2a84 ... #will be preserved

4
আমি গিথুবে নতুন, আপনি কীভাবে তারপরে পরিবর্তনগুলি ঠেকেন (আমি যখন সিঙ্ক ক্লিক করি তখন এটি আমার কী করে তা ফিরিয়ে দেয়)। আমি মনে করি এটি পেয়েছি: git push origin HEAD --force
নিকোলাস থেরি

@ নিকোলাস তিরি আপনি করবেন না এই কারণেই গিট পুশ - ফোর্স ব্যতীত কাজ করতে অস্বীকার করেছে, কারণ আপনি ইতিহাস পুনরায় লিখছেন এবং আপনি অন্যান্য লোকের ভাণ্ডারগুলি ভাঙ্গবেন। আপনি যদি ইতিমধ্যে ঠেলাঠেলি করেন তবে আপনার একমাত্র বিকল্পটি হ'ল একটি git revert। কোনটি, যখন আপনি এটি সম্পর্কে বোধগম্য হন কারণ আপনি যদি অন্য কারও কোডটি টানেন তবে আপনি চান না যে তারা কোনও ধরণের ইতিহাস ছাড়াই আপনার পুরানো কমিটগুলি মুছতে সক্ষম হবে?
রাগান ড্যান

আমি ধরে নিলাম এটি কেবল বর্তমান গিট রেপোতে কাজ করে এবং উজানের / কোনও গিট নোডের কোনও পরিবর্তন করে না?
আলেকজান্ডার মিলস

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

dবা dropইতিহাস থেকে কমিটস সরানোর আদেশ।
পরিত্যক্ত কার্ট

5

কমিট (গুলি) পুরোপুরি মুছে ফেলার dropজন্য এখন গিট ইন্টারেক্টিভ রিবেসগুলির জন্য একটি নতুন বিকল্প রয়েছে । প্রথম রান:

git rebase -i HEAD~4

তারপর প্রতিস্থাপন pickসঙ্গে dropকমিট (গুলি) বাদ দেয়া হবে জন্য:

pick 2f05aba ... #will be preserved
drop 3371cec ... #will be dropped
drop daed25c ... #will be dropped
pick e2b2a84 ... #will be preserved

এটি ফেডোরায় নিম্নলিখিত সংস্করণ সহ আমার জন্য কাজ করেছে:

$ git version
git version 2.21.0

2

স্কোয়াশ কার্যকর যখন আপনি একটি একক হ্যাশের অধীনে মার্জ করা কমিটের একটি তালিকা তৈরি করতে চান তবে আপনি যদি তিনটি পৃথক কমিট নিতে চান এবং চূড়ান্ত আউটপুট থাকে যা দেখে মনে হয় এটি একক প্রতিশ্রুতি ছিল, তবে আমি সুপারিশ করছি fixup

git rebase -i HEAD~4

pick 2f05aba ... will be preserved
fixup 3371cec ... will be merged with daed25c
fixup daed25c ... will be merged with e2b2a84
pick e2b2a84 .. will include 3371cec and daed25c, but only the commit message of e2b2a84

ইন্টারেক্টিভ রিবেস ইউআইয়ের কমান্ড তালিকায় আপনি আরও তথ্য সন্ধান করতে পারেন।

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