দূরবর্তী শাখার সাথে আমার স্থানীয় শাখাটি ওভাররাইটিং করা


153

আমি আমার স্থানীয় শাখা সম্পূর্ণরূপে fubar'd করেছি, এবং আবার শুরু করতে চাই। সার্ভারের সংস্করণটি সঠিক।

আমি আবার শুরু করতে চাই না, আমি আমার স্থানীয় ইতিহাসটি আমার বিশাল স্ক্রুআপটি ঠিক করতে ব্যবহার করতে চাই। (আমি যদি করতে পারি তবেই পারি))

git fetch branchname, এবং git pull branchnameকাজ না। আমি যে বার্তাটি পাই তা " টু টু ডেট " তবে আমার স্থানীয় সংস্করণটি সার্ভারের সাথে মেলে না।

git pull origin/branchnameআমাকে একটি " পাওয়া যায়নি " ত্রুটি দেয়।


উত্তর:


248

প্রথমে, বর্তমান অবস্থানে একটি নতুন শাখা তৈরি করুন (আপনার যদি আপনার পুরানো 'স্ক্রুওড' ইতিহাসের প্রয়োজন হয়):

git branch fubar-pin

আপনার দূরবর্তী শাখাগুলির তালিকা আপডেট করুন এবং নতুন কমিটগুলি সিঙ্ক করুন:

git fetch --all

তারপরে, আপনার শাখাটি সেই স্থানে পুনরায় সেট করুন যেখানে উত্স / শাখাটি নির্দেশ করে:

git reset --hard origin/branch

সাবধান , এটি আপনার কার্যকারী গাছ থেকে যে কোনও পরিবর্তন সরিয়ে ফেলবে !


2
+1 তবে আপনি git fetch originপুনরায় সেট করার আগে করতে একটি অনুস্মারক যোগ করতে চান
মার্ক লঙ্গায়ার

আমি এটি একটি সামান্য পরিবর্তন দিয়ে করেছি এবং এটি কার্যকর হয়নি: গিট আনতে - সমস্ত, গিট পুনরায় সেট করুন - SHA1OFANOLDCOMMIT, (অন্য কিছু স্টাফ), গিট পুনরায় সেট করুন - মূল উত্স / শাখা শেষ ফলাফলটি আমি এখনও পুরানো প্রতিশ্রুতিতে ছিলাম। সুতরাং, এই পদ্ধতিটি কিছু ক্ষেত্রে কার্যকর হতে পারে তবে আমি মনে করি এটি সমস্ত ক্ষেত্রে কার্যকর হয় না।
গ্রেগলস

@ গ্রেগলস: কোন ত্রুটি? শেষ কমান্ডের পরে, হেডকে অবশ্যই মূল / শাখাটি নির্দেশ করতে হবে।
নিটল

1
@ গ্যাভিন: না, এটি কোনও পরিস্থিতিতে অন্য শাখাগুলিকে প্রভাবিত করবে না origin/branch। কখনও।
নিটল

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

60

আমি যখন আমার স্থানীয় শাখা জগাখিচুড়ি করি তখন আমি যা করি তা হ'ল আমি কেবল আমার ভাঙ্গা শাখার নাম পরিবর্তন করেছি এবং আবার প্রবাহ শাখাটি / শাখাটি আবার পরীক্ষা করে দেখছি:

git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch

তারপরে যদি আপনি নিশ্চিত হন যে আপনি নিজের পুরানো শাখা থেকে কিছু চান না, এটি সরিয়ে ফেলুন:

git branch -D branch-old

তবে সাধারণত আমি পুরানো শাখাটি স্থানীয়ভাবে ছেড়ে চলে যাই, কেবল যদি সেখানে কিছু থাকি।


4
এটি সেরা উত্তর মত মনে হচ্ছে। এটি কেবলমাত্র ক্ষেত্রে ব্যাকআপ কপি তৈরি করতে সহায়তা করে এবং খুব সম্ভবত স্থানীয় শাখায় দূরবর্তীটির যথাযথ অনুলিপি তৈরি হতে পারে বলে মনে হয়।
গ্রেগলস

দুর্দান্ত উত্তর, আমার জন্য দরকারী। এক প্রশ্ন: অফিসিয়াল গিট-চেকআউট ডকুমেন্টেশন বলে মনে হচ্ছে যে আপনার তৃতীয় আদেশটি হওয়া উচিত: git checkout -b <branch> --track <remote>/<branch>আপনার ব্যতীত সমানভাবে কী ভালভাবে কাজ করে --track?
স্টারম্যান

1
আমি মনে করি কনফিগারেশ ভার branch.autoSetupMerge(যা আমি ডিফল্টকে সত্য বলে মনে করি) তা অন্তর্ভুক্ত করে --track। আর, হ্যাঁ, আমার সমস্ত Git স্থাপনার আমি স্পষ্টভাবে প্রয়োজন হবে না --trackযখন একটি করছেন checkout -b, কিন্তু YMMV।
কেসি মার্শাল

5

আপনার স্থানীয় শাখায় সম্ভবত আপনি এটি বাতিল করতে চান তাতে পরিবর্তন রয়েছে। এটি করার জন্য, আপনাকে git resetশাখা প্রধানকে শেষ প্রান্তে পুনরায় সেট করতে ব্যবহার করতে হবে যা আপনি উজানের রেপোর শাখা থেকে সরিয়ে নিয়েছেন। git branch -vপ্রবাহের শাখার sha1 আইডি সন্ধান করতে ব্যবহার করুন এবং এটি ব্যবহার করে এটি আপনার শাখাটিকে পুনরায় সেট করুন git reset SHA1ID। তারপরে git checkoutআপনার ডিরেক্টরিতে থাকা পরিবর্তনগুলি বাতিল করতে আপনি এমনটি করতে সক্ষম হবেন ।

দ্রষ্টব্য: সর্বদা এটি ব্যাক আপ আপ রেপোতে করুন। এইভাবে আপনি নিশ্চিত করতে পারেন যে আপনি নিজেরাই এটি সঠিকভাবে কাজ করেছেন। অথবা যদি তা না হয় তবে আপনার কাছে ফিরে যেতে ব্যাকআপ রয়েছে have


এটি সম্ভবত কাজ করবে বলে মনে হয়, তবে "আপনার কাজের অনুলিপি অন্য কোথাও তৈরি করুন, দূরবর্তী শাখার একটি নতুন কপি তৈরি করুন" এর পদ্ধতির সরলতা এবং নির্ভরযোগ্যতার কারণে আমি কীভাবে এটি আরও ভাল তা দেখতে ব্যর্থ হয়েছি।
18:58

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