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


262

আমি কিছু নিয়ে কাজ করছি, এবং সিদ্ধান্ত নিয়েছি এটি সম্পূর্ণরূপে খারাপ হয়ে গেছে ... এটির কিছু করার পরে। সুতরাং আমি নিম্নলিখিত ক্রম চেষ্টা করেছিলাম:

git reset --hard
git rebase origin
git fetch
git pull
git checkout

কোন মুহুর্তে আমি বার্তাটি পেয়েছি

Your branch is ahead of 'origin/master' by 2 commits.

আমি আমার স্থানীয় ডিরেক্টরিটি মুছে না ফেলে আমার স্থানীয় ডিরেক্টরিটি মুছে ফেলা এবং সবকিছু পুনরায় ডাউনলোড করতে চাই। আমি কীভাবে এটি সম্পাদন করতে পারি?


6
উভয়ই করার দরকার নেই git fetchএবং git pull- টান আনতে এবং একত্রিত করার সংমিশ্রণ।
ইথার

12
ব্যবহারকারীদের জন্য নোট: এই প্রশ্নের মূল সমস্যার কোনও উত্তর নেই এই বার্তাটির সাথে "আপনার শাখা 'এন / কমিটমেন্ট দ্বারা' উত্স / মাস্টার 'এর আগে রয়েছে। । দয়া করে এই বার্তার কারণে এটির সদৃশ হিসাবে অন্যান্য প্রশ্নগুলি বন্ধ করে দিন।

উত্তর:


579
git reset --hard origin/master

রেपो নাম origin/masterকোথায় নেই এবং শাখার নাম নয় এমন সমস্ত কমিট সরিয়ে ফেলবে ।originmaster


1
আমি ভেবেছিলাম সিনট্যাক্স "উত্স / মাস্টার", একটি স্ল্যাশ সহ, একটি স্থানীয় রেপোকে বোঝায়?
ড্যানিয়েল সি সোব্রাল

9
মিপাডি: আরও সঠিকভাবে বলতে গেলে, এটি বর্তমান শাখাটিকে পুনরায় সেট করবে উত্স / মাস্টার হিসাবে একই প্রতিশ্রুতিতে নির্দেশ করে।
ক্রিস্টোফার হ্যামারস্ট্রেম

এটি একটি শাখা বোঝায়। দূরবর্তী রেপোর শাখা origin/masterট্র্যাক করে এমন একটি শাখা । masterorigin
মিপাদি

@ ড্যানিয়েলসি.সোব্রাল নং, নামক রিমোটের শাখার origin/masterএকটি উল্লেখ । masterorigin
ম্যাথু

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

33

মিপাডি (যা উপায় দ্বারা কাজ করা উচিত) এর উত্তর বাদে একদিকে যেমন আপনার জানা উচিত:

git branch -D master
git checkout master

এছাড়াও আপনি যা চান ঠিক তা করে having to redownload everything(আপনার উদ্ধৃতিটি পরিচ্ছেদে) sed কারণ আপনার স্থানীয় রেপোতে রিমোট রেপোর একটি অনুলিপি রয়েছে (এবং সেই অনুলিপিটি আপনার স্থানীয় ডিরেক্টরি হিসাবে একই নয়, এটি আপনার চেক আউট শাখার মতোও নয়)।

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

আপনার যদি মাস্টার ব্যতীত অন্য কোনও শাখা না থাকে তবে আপনার উচিত:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp

4
তবে কীভাবে এটি স্থানীয়ভাবে করা কমিটগুলি স্থানীয়ভাবে করা কমিটগুলি আলাদা করে বলে? আসলে, এটি আমাকে বলে যেCannot delete the branch 'master' which you are currently on.
ড্যানিয়েল সি সোব্রাল

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

2
২. অবশ্যই আপনি বর্তমানে যে শাখাটি পরীক্ষা করে দেখেছেন তা মুছতে পারবেন না। মাস্টার মুছতে, প্রথমে অন্য একটি শাখা পরীক্ষা করে দেখুন। এর মধ্যে যদি অন্য কোনও শাখা না থাকে তবে কেবল একটি অস্থায়ী একটি তৈরি করুন:git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
স্লাইটব্যাটম্যান

আপনার রিমোট রেপোর স্থানীয় কপিটি পৃথক হওয়ার বিষয়ে আমি কী বলেছিলাম সে সম্পর্কেও নোট করুন: গিট আপনাকে আপনার দূরবর্তী শাখার অনুলিপিতে ফাইল সম্পাদনা করতে এমনকি দেখার অনুমতি দেবে না। এটি কেবল আপনাকে দূরবর্তী শাখা থেকে অন্য একটি শাখা তৈরি করার অনুমতি দেবে যা আপনি তারপরে দেখতে ও সম্পাদনা করতে পারবেন। সম্মেলনে, এই স্থানীয় শাখার প্রত্যন্ত শাখার মতো একই নাম রয়েছে। আপনি origin/masterআপনার স্থানীয় মেশিনে এটি আংশিক ঠিক রয়েছেন। এটি আপনার দূরবর্তী শাখার স্থানীয় (পূর্ণ) অনুলিপি। আসল রিমোট শাখা হ'ল origin master
slebetman

এটি আমার পক্ষে কাজ করেছে। হয়তো git branch -D masterনা প্রয়োজনীয় যদিও, যেহেতু যেমন উল্লেখ আউট এটি একটি ত্রুটির উত্পন্ন ছিল।
অ্যালেক্সিস উইল্কে

15

আমি যা করি তা হ'ল আমি হেডকে শক্ত করে রিসেট করার চেষ্টা করি। এটি স্থানীয় সমস্ত প্রতিশ্রুতি মুছে ফেলবে:

git reset --hard HEAD^

এটি সর্বোত্তম উত্তর, এটি সত্যিই কাজ করেছিল। সমস্ত স্থানীয় কমিটগুলি বাতিল এবং হেডে পুনরায় সেট করা হয়েছে। ^ চরের ব্যবহার কী?
করিম

@ ক্যারিম '^' সম্ভবত রিজেক্স স্টাফ, যা সম্ভবত বেশ গভীর কিছু যা আমি ম্যানুয়াল ফাইলটিতে খুব বেশিদিন আগে জানি না বা পড়ি না .. দুঃখিত মানুষ :)
giang nguyen

1
দেরীতে, তবে ^পিতামাতার প্রতিশ্রুতি প্রতিনিধিত্ব করে, তাই HEAD^আপত্তিহীন পরিবর্তনগুলি বাতিল করে এবং শাখাটিকে পূর্বের প্রতিশ্রুতিতে সরিয়ে নিয়ে যায়, কার্যকরভাবে সর্বাধিক সাম্প্রতিক কমিটকে "মোছা" কার্যকর করে (যদিও কমিট এখনও বিদ্যমান, শাখাটি কেবল এটি দেখায় না)। উত্তরের একটি মাত্র স্থানীয় প্রতিশ্রুতি থাকবে এবং বাকীগুলি অননুমোদিত পরিবর্তন are @ করিম @ জিইগ
কোয়ান্টাম কিউভার

3

আপনার চালানো দরকার

git fetch

সমস্ত পরিবর্তনগুলি পেতে এবং তারপরে আপনি "আপনার শাখা এগিয়ে রয়েছে" সহ বার্তা পাবেন না।


5
আনয়নটির প্রশ্নকারীর মূল সমস্যাটির সাথে কোনও সম্পর্ক নেই, যা স্থানীয় অঙ্গীকার থেকে মুক্তি পাচ্ছে।

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

1

আমি এমন উদাহরণগুলি দেখেছি যেখানে রিমোটটি সিঙ্কের বাইরে চলে যায় এবং আপডেট করার দরকার পড়ে। যদি একটি reset --hardবা branch -Dকাজ করতে ব্যর্থ হয় তবে চেষ্টা করুন

git pull origin
git reset --hard 

এই প্রশ্নের উত্তর দেয় না, reset --hardএই পরিস্থিতিতে একটি কাজ
চার্লসবি

1
হাই চার্লস, আপনি ঠিক বলেছেন যে reset --hardএখানে কাজ করা উচিত। তবে আমি কেবল উল্লেখ করছি যে এটি শাখাটি যথাযথভাবে পুনরায় সেট করতে ব্যর্থ হয় এবং git pull originএটি রিমোটটি পুনরায় সিঙ্ক করে এবং reset --hardসঠিকভাবে কাজ করার অনুমতি দেয় ।
জিম ক্লাউজ

0

আমাকে একটি করতে হয়েছিল:

git checkout -b master

যেমন গিট বলেছে যে এটি বিদ্যমান নেই, কারণ এটি দিয়ে মুছে ফেলা হয়েছে

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