আমি দুর্ঘটনাক্রমে ভুল শাখায় প্রতিশ্রুতিবদ্ধ। আমি কীভাবে সেই প্রতিশ্রুতি মুছে ফেলব?
আমি দুর্ঘটনাক্রমে ভুল শাখায় প্রতিশ্রুতিবদ্ধ। আমি কীভাবে সেই প্রতিশ্রুতি মুছে ফেলব?
উত্তর:
আপনি যে কাজটি করেছেন তা রেখে সাম্প্রতিক প্রতিশ্রুতি মুছুন:
git reset --soft HEAD~1
আপনি যে কাজটি করেছেন তা ধ্বংস করে অতি সাম্প্রতিক প্রতিশ্রুতি মুছুন :
git reset --hard HEAD~1
git reset --hard origin
git remoteআমার জন্য চিন্তার তালিকা উত্স, git reset --hard originবলেছেন fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.। কেন?
git reset HEAD~1আপনার সমস্ত পরিবর্তনগুলিও রাখবে তবে আপনাকে সবকিছু রাখার পরিবর্তে খালি সূচি দিয়ে ফেলে দেবে ( --softবিকল্পটি যেমন হবে)।
আমি অবাক হয়েছি কেন আমি যে সেরা উত্তর খুঁজে পেয়েছি তা কেন কেবল মন্তব্যে! ( দেনিথ 86 টি ভোট দিয়ে )
git reset --hard origin
এই কমান্ডটি স্থানীয় স্থানীয় সংগ্রহস্থলকে সিলেক্ট করবে রিমোট রিপোজিটরির সাথে আপনার স্থানীয়তে করা প্রতিটি পরিবর্তন থেকে মুক্তি পেয়ে। আপনার উত্সটিতে যে সঠিক শাখা রয়েছে তা আনতে আপনি নীচেরগুলিও করতে পারেন।
git reset --hard origin/<branch>
git reset --hard origin/<branch>
git reset --soft origin/<branch>, আপনি যদি অঙ্গীকার থেকে মুক্তি পেতে চান তবে স্থানীয় কাজটি চালিয়ে যান।
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree., আপনার যেমন শাখাটি নির্দিষ্ট করা দরকার:git reset --hard origin/feature/my-cool-stuff
এটি মুছবেন না: কেবল একটি প্রতিশ্রুতিবদ্ধতার জন্য git cherry-pick যথেষ্ট।
তবে আপনার যদি ভুল শাখায় বেশ কয়েকটি প্রতিশ্রুতি থাকে তবে তাgit rebase --onto জ্বলে উঠছে:
ধরুন আপনার কাছে এটি রয়েছে:
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
, তারপরে আপনি masterযেখানে চিহ্নিত হতে চান সেখানে চিহ্নিত করে এটি স্থানান্তর করতে পারবেন :
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
, y শাখা যেখানে এটি হওয়া উচিত ছিল তা পুনরায় সেট করুন:
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
, এবং অবশেষে আপনার কমিটগুলি সরান (এগুলি প্রয়োগ করুন, বাস্তবে নতুন কমিট তৈরি করুন)
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
আপনি git rebase -i FAR_ENOUGH_BACKযে প্রতিশ্রুতি চান না তার জন্য একটি করুন এবং লাইনটি ফেলে দিন।
আপনি যদি সেই প্রতিশ্রুতি অন্য কোনও শাখায় স্থানান্তর করতে চান তবে কমিটের এসএইচএকে প্রশ্নবিদ্ধ করুন
git rev-parse HEAD
তারপরে বর্তমান শাখাটি স্যুইচ করুন
git checkout other-branch
এবং cherry-pickপ্রতিশ্রুতিবদ্ধother-branch
git cherry-pick <sha-of-the-commit>
git reset --hard HEAD~1পরে প্রয়োজন necess আমি মনে করি reset --softতারপরে শাখাগুলি স্যুইচ করা এবং পুনরায় প্রতিশ্রুতিবদ্ধকরণের ফলে অতিরিক্ত কাজ বাঁচানো যেত। তারপরে আবার আমি সোর্স ট্রি ব্যবহার করে আমার বেশিরভাগ বুনিয়াদি জিনিসগুলি ব্যবহার করছিলাম, আমার ত্রুটির পরে কেবল এটির সাথে লাইন-ইন-কমান্ড করুন।
আপনার রেফারেন্সের জন্য, আমি বিশ্বাস করি যে আপনি "হার্ড কাট" আপনার বর্তমান শাখা থেকে কেবল গিট রিসেট --হার্ডের সাথেই নয়, নিম্নলিখিত কমান্ডের মাধ্যমেও প্রতিশ্রুতিবদ্ধ করতে পারেন:
git checkout -B <branch-name> <SHA>
আসলে, যদি আপনি চেক আউট সম্পর্কে চিন্তা না করেন তবে আপনি যা চান তার সাথে শাখাটি সেট করতে পারেন:
git branch -f <branch-name> <SHA>
এটি কোনও শাখা থেকে কমিটগুলি সরিয়ে ফেলার একটি প্রোগ্রামিক উপায় হবে, উদাহরণস্বরূপ, এতে নতুন কমিটগুলি অনুলিপি করার জন্য (পুনরায় ব্যবহার করা)।
ধরুন আপনার কাছে একটি শাখা রয়েছে যা মাস্টার থেকে সংযোগ বিচ্ছিন্ন হয়েছে কারণ আপনি অন্য কোনও স্থান থেকে উত্স নিয়েছেন এবং শাখায় ফেলে দিয়েছেন।
আপনার এখন একটি শাখা রয়েছে যেখানে আপনি পরিবর্তনগুলি প্রয়োগ করেছেন, আসুন এটি "বিষয়" বলি।
আপনি এখন আপনার বিষয় শাখার সদৃশ তৈরি করবেন এবং তারপরে শাখা "ডাম্প" বসা সোর্স কোড ডাম্পের উপর এটি পুনরায় চালু করবেন:
git branch topic_duplicate topic
git rebase --onto dump master topic_duplicate
এখন আপনার পরিবর্তনগুলি শাখা টপিক-ডুপ্লিকেটে "ডাম্প" শুরুর পয়েন্টের ভিত্তিতে পুনরায় প্রয়োগ করা হবে তবে কেবলমাত্র "মাস্টার" এর পরে ঘটে যাওয়া কমিটগুলিই করা হবে। সুতরাং মাস্টার থেকে আপনার পরিবর্তনগুলি এখন "ডাম্প" এর শীর্ষে প্রয়োগ করা হয়েছে তবে ফলাফলটি "টপিক_ডুপ্লিকেট" এ শেষ হবে।
তারপরে আপনি "বিষয়_ নকল" দিয়ে "ডাম্প" প্রতিস্থাপন করতে পারেন:
git branch -f dump topic_duplicate
git branch -D topic_duplicate
বা সাথে
git branch -M topic_duplicate dump
বা কেবল ডাম্প ফেলে দিয়ে
git branch -D dump
বর্তমান "টপিক_ডুপ্লিকেট" সাফ করার পরে আপনি কেবল চেরি-পিক করতে পারেন।
আমি যা বলার চেষ্টা করছি তা হ'ল আপনি যদি পূর্বসূরীর ভিত্তিতে বর্তমান "নকল" শাখাকে আপডেট করতে চান তবে আপনাকে অবশ্যই প্রথমে "চেরিপিক্সড" কমিটগুলি মুছে ফেলতে হবে git reset --hard <last-commit-to-retain>বা দ্বারাgit branch -f topic_duplicate <last-commit-to-retain> এবং তারপর উপর অন্য করে কপি (প্রধান থেকে বিষয় শাখা) হয় ছাড় বা চেরি-বাছাই করে by
রিবেসিং কেবল এমন শাখায় কাজ করে যা ইতিমধ্যে কমিটস রয়েছে, সুতরাং প্রতিবার আপনি যখন চাইলে আপনার বিষয় শাখাটি নকল করতে হবে।
চেরিপিক করা অনেক সহজ:
git cherry-pick master..topic
সুতরাং পুরো ক্রমটি নেমে আসবে:
git reset --hard <latest-commit-to-keep>
git cherry-pick master..topic
যখন আপনার বিষয়-সদৃশ শাখাটি পরীক্ষা করা হয়েছে। এটি বর্তমান নকল থেকে পূর্বের-চেরি-বাছাই করা কমিটগুলি সরিয়ে ফেলবে এবং কেবলমাত্র আপনার বর্তমান "ডাম্প" (বিভিন্ন পূর্বপুরুষ) এর শীর্ষে "বিষয়" এ ঘটে যাওয়া সমস্ত পরিবর্তন পুনরায় প্রয়োগ করবে। আপনার স্থানীয় পরিবর্তনগুলি এখনও এটির জন্য প্রযোজ্য কিনা তা পরীক্ষা করার জন্য ভিন্ন "ডাউনস্ট্রিম" মাস্টার ব্যবহার করার সময় "রিয়েল" আপস্ট্রিম মাস্টারের উপর আপনার বিকাশকে যুক্তিসঙ্গত সুবিধাজনক উপায় বলে মনে হয়। বিকল্পভাবে আপনি কেবল একটি ভিন্নতা তৈরি করতে পারেন এবং তারপরে এটি কোনও গিট উত্স গাছের বাইরে প্রয়োগ করতে পারেন। তবে এইভাবে আপনি একটি আপ-টু-ডেট মডিফাইড (প্যাচড) সংস্করণ রাখতে পারেন যা আপনার বিতরণের সংস্করণের উপর ভিত্তি করে যখন আপনার আসল বিকাশ আসল প্রবাহের মাস্টার বিরোধী।
সুতরাং কেবল প্রদর্শন করতে:
আশা করি এটি কাউকে সাহায্য করবে। আমি এটি পুনরায় লেখার অর্থ ছিল, কিন্তু আমি এখন পরিচালনা করতে পারি না। শুভেচ্ছা।
নিম্নলিখিত কমান্ডটি আমার পক্ষে কাজ করেছে, সমস্ত স্থানীয় প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি বাদ দেওয়া হয়েছে এবং স্থানীয় দূরবর্তী উত্স / মাস্টার শাখার মতো পুনরায় সেট করা হয়েছে।
গিট রিসেট - মূল উত্স