আমি কীভাবে গিট মাস্টার শাখাটিকে একটি কাঁটাযুক্ত ভাণ্ডারে উজানের শাখায় পুনরায় সেট করতে পারি?


108

আমি আমার কাঁটা গিট রেপোর মাস্টার শাখাটিকে পুরোপুরি গণ্ডগোল করে ফেলেছি।

আপস্ট্রিম মাস্টার রেপোর সামগ্রীগুলির সাথে আমার কাঁটাচামচায় চাপানো সেই মাস্টার শাখাটি পুরোপুরি পুনরায় সেট করতে চাই। আমার কোনও মাস্টার শাখার পরিবর্তন বা ইতিহাস ধরে রাখার আগ্রহ নেই।

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

সুতরাং আমি কীভাবে আমার প্রবাহিত মাস্টার শাখাটি প্রবাহের মাস্টারের সাথে পুনরায় সেট করব?


git clone https://myrepo.git
cd myrepo
git remote add upstream https://upstream.git
git fetch upstream

আমি এখান থেকে আমার স্থানীয় এবং দূরবর্তী মাস্টার শাখাগুলি আপস্ট্রিম মাস্টারের সাথে পুনরায় সেট করতে কোথায় যাব?

উত্তর:


204

আপনি আপনার স্থানীয় মাস্টার শাখাটি প্রবাহের সংস্করণে পুনরায় সেট করতে পারেন এবং এটি আপনার ভাণ্ডারে ঠেলাতে পারেন।

ধরে নিই যে "আপস্ট्रीम" হ'ল মূল সংগ্রহস্থল এবং "উত্স" আপনার কাঁটাচামচ:

# ensures current branch is master
git checkout master

# pulls all new commits made to upstream/master
git pull upstream master

# this will delete all your local changes to master
git reset --hard upstream/master

# take care, this will delete all your changes on your forked master
git push origin master --force

(আপনি মূল রেপোটিকে "আপস্ট্রিম" এর সাথে সংজ্ঞায়িত করতে পারেন git remote add upstream /url/to/original/repo।)


4
এটি সম্ভবত git reset --hard upstream/masterওয়ার্কিং ডিরেক্টরিটি পুনরায় সেট করা উচিত । তবে আপনার উত্তর তবুও সঠিক।
j6t

4
এটি খুব সহায়ক ছিল।
আলেম এস

4
git fetch upstreamপ্রথমে কল করতে হবে
হেনরি ই

4
@ হেনরিই নোট হিসাবে, প্রথমে প্রথমে প্রবাহের পরিবর্তনগুলি ব্যর্থ হওয়ায় git fetch upstreamসাধারণত নিম্নলিখিত অ-মানব-পঠনযোগ্য ত্রুটি পাওয়া যায়:"fatal: ambiguous argument 'upstream/master': unknown revision or path not in the working tree."
সিসিল কারি

4
কেবল সাবধান হন যে জোর করে ধাক্কা আপনার প্রবাহের জন্য করা সমস্ত খোলা পুল-অনুরোধগুলি স্বয়ংক্রিয়ভাবে বন্ধ করে দেয়। আমি এই সম্পর্কে অবগত ছিল না, যা কিছুটা অবাক হয়েছিল।
ফ্রাঙ্ক বস

5

এটি আপনার মূল শাখাটিকে প্রবাহের মাস্টারের সাথে পুনরায় সেট করবে এবং যদি আপনার কাঁটাচামচ করার পরে যদি শাখাটি আপডেট করা থাকে তবে এটি সেই পরিবর্তনগুলিও টানতে পারে।

git checkout master 
git reset upstream/master
git pull --rebase upstream master
git push origin master --force

পিএস: অনুমান করা হয় যে প্রবাহটি মূল অনুলিপি হয় তবে মূল প্রবাহটি আপনার অনুলিপি হয়।


এটি প্রদর্শিত হবে যেন আপনি নিজের শাখাটি একটি ভিন্ন প্রতিশ্রুতি থেকে তৈরি করেছেন। প্রত্যাবাসনের প্রাথমিক কারণটি লিনিয়ার প্রকল্পের ইতিহাস বজায় রাখা। এটি বলেছিল, একবার যদি কোনও পাবলিক ভান্ডারগুলিতে প্রকাশিত হয় তবে আপনাকে কখনই এই প্রতিশ্রুতিগুলি রিবেস করা উচিত নয় কারণ এটি পুরানো চুক্তিকে নতুনগুলির সাথে প্রতিস্থাপন করে। বিশদ জন্য অনুগ্রহ করে atlassian.com/git/tutorials/rewriting-history/git-rebase দেখুন
user8128167

0

আমি পদ্ধতিটি এইভাবে চেষ্টা করেছি:

$REPO=<repo>
$ORIGIN=<user>/$REPO
$UPSTREAM=<upstream>/$REPO

$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git reset --hard upstream/master
$ git pull --rebase upstream master
$ git push origin master --force

আউটপুট একটি সতর্কতা প্রদর্শন করবে:

fatal: ambiguous argument 'upstream/master': 
unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

সুতরাং সঠিক উপায় git pullআগে রাখা হয়েছে git reset:

$ git clone git@github.com:$ORIGIN.git
$ cd $REPO
$ git checkout master
$ git remote add upstream git@github.com:$UPSTREAM.git
$ git pull --rebase upstream master
$ git reset --hard upstream/master
$ git push origin master --force

তারপরে আউটপুটটি এর মতো হবে:

From github.com:<upstream>/<repo>
 * branch                master     -> FETCH_HEAD
 * [new branch]          master     -> upstream/master
HEAD is now at 7a94b1790 Merge pull request #4237 from <upstream>/...
Current branch master is up to date.
Everything up-to-date.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.