গিথুব এবং স্থানীয়ভাবে সর্বনিম্ন কমিটগুলি কীভাবে মুছবেন?


127

আমি আমার গিটহাবের একটি সংগ্রহস্থল থেকে শেষ 2 টি কমিট মুছে ফেলতে চাইছি। আমি প্রস্তাব চেষ্টা করেছি এখানে : git push -f origin HEAD^^:master। দেখে মনে হচ্ছে এটি শেষ হিসাবে দু'টি প্রতিশ্রুতি সরিয়ে ফেলা হয়েছে।

তারপরে আমি এগুলিকে আমার স্থানীয় সংগ্রহস্থল থেকে মুছলাম git rebase -i HEAD~2। আমি এই কমিটগুলির সাথে সম্পর্কিত লাইনগুলি সরিয়ে দিয়েছি এবং git logসেগুলি সঠিকভাবে মুছে ফেলা হয়েছে কিনা তা পরীক্ষা করে দেখি ।

এর পরে, আমি আমার স্থানীয় সংগ্রহস্থলগুলিতে কিছু পরিবর্তন আনছি, একটি নতুন প্রতিশ্রুতিবদ্ধ এবং গিটহাবের দিকে এগিয়ে চলেছি। সমস্যাটি হ'ল, আমার গিটহাব অ্যাকাউন্টে আমার আগের দুটি কমিট রয়েছে যা আমি মুছে ফেলার চেষ্টা করেছি।

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

কোন ধারণা?

উত্তর:


199

স্থানীয়ভাবে শেষ দুটি প্রতিশ্রুতি অপসারণ করতে আমি এটি ব্যবহার করার পরামর্শ দেব:

git reset --hard HEAD^^

রিবেস একটি সম্পূর্ণ আলাদা অপারেশন যা আপনাকে এখানে সহায়তা করবে না।


23
আপনি যদি ইতিমধ্যে এই পরিবর্তনটিকে একটি দূরবর্তী সংগ্রহস্থলে ঠেলে দিয়ে থাকেন। আপনি এটিকে গিট পুশ -ফ দিয়ে মুছে ফেলতে পারেন
ইভান ফার্নান্দেজ

আপনি কি সর্বশেষ এন সংখ্যা কমিটের জন্য সাধারণ করতে পারেন?
ব্যবহারকারী_19

6
@ user_19 তোমার মত জিনিস করতে পারেন git reset --hard HEAD^4বা git reset --hard HEAD~4। যদিও, আপনার ইতিহাসটিতে মার্জ থাকলে জিনিসগুলি কিছুটা জটিল হয়ে উঠতে পারে। আপনি এখানে সম্পর্কিত বিভাগে সংশোধনী নির্দিষ্টকরণ সম্পর্কে আরও তথ্য পেতে পারেন ।
কেএল -7

2
আমি যদি শেষ 7 টি কমিট মুছে ফেলতে চাইতাম ?? আমাকে কি 7 বার
HE শিরোনামের

4
@ গাগানগামি, আমি মনে করি আপনি তা করবেন git reset --hard HEAD~7তবে আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন।
কন আন্তোনাকোস

105

আপনি যদি সর্বশেষ দুটি (দুটি) কমিট সরিয়ে ফেলতে চান তবে এটি করার জন্য একটি সহজ কমান্ড রয়েছে:

git reset --hard HEAD~2

আপনি 2মুছে ফেলতে চান এমন শেষ সংখ্যার যে কোনও সংখ্যার জন্য আপনি এটি পরিবর্তন করতে পারেন।

এবং এই পরিবর্তনটিকে দূরবর্তী স্থানে ঠেকাতে, আপনাকে বল ( ) পরামিতি git pushদিয়ে একটি করতে হবে :-f

git push -f

যাইহোক, আপনি মুছে ফেলতে চান এমন প্রতিশ্রুতি দেওয়ার পরে রিমোট (গিথুব) এ নতুন কমিটস রয়েছে কিনা তা নিয়ে আমি কোনও gitকমান্ড -fবা --hardবিকল্পগুলির সাথে জড়িত থাকার পরামর্শ দিচ্ছি না । সেক্ষেত্রে সর্বদা ব্যবহার করুন ।git revert


আমি কী পরিবর্তন করেছি?
জুহায়ের তাহির

@ সিমফনিউজার, না। আপনি যখন hardআদেশটি তৈরি করলেন , আপনি এই দুটি অঙ্গীকারকে loose িলা করুন। আপনি যদি পরিবর্তনগুলি সংরক্ষণ করতে চান diffতবে রিসেট প্রয়োগের আগে এই কমিটগুলির একটি ফাইল তৈরি করুন।
ধেরিক

3
@ZuhayerTahir যদি আপনি চান ঠিক পূর্বাবস্থা সংগঠনের শেষ 5 করে জন্য তারপর কি git reset HEAD~5(ব্যবহার করবেন না hard)। এইভাবে আপনি আপনার পরিবর্তনগুলি মঞ্চস্থ অবস্থায় পাবেন (যেমন প্রতিশ্রুতিবদ্ধ নয়)। আমার জন্য এই উত্তর দেখুন
মধু

@ মধু আপনার প্রতিক্রিয়া জন্য আপনাকে ধন্যবাদ। আমি একই সিদ্ধান্তে এসেছি।
জুহায়ের তাহির

29

নিম্নলিখিত আমার জন্য কাজ করে

git reset HEAD~n

এটি nস্থানীয় রেপো থেকে সর্বশেষ কমিটগুলি HEAD^সরিয়ে দেয়, কেবলমাত্র একটিটিকে সরিয়ে দেয়। আপনার যদি এই পরিবর্তনগুলি দূরবর্তী থেকে সরানোর দরকার হয় তবে আপনাকে রিমোটের পিছনে থাকায় আপনাকে জোর করে চাপ দিতে হবে।

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