আমি ঠিক ভুল শাখায় পুরোপুরি ভাল প্রতিশ্রুতিবদ্ধ করেছি। আমি কীভাবে আমার মাস্টার শাখায় শেষ প্রতিশ্রুতি পূর্বাবস্থায় ফিরিয়ে আনতে পারি এবং তারপরে সেই একই পরিবর্তনগুলি নিয়ে তা আমার আপগ্রেড শাখায় নিয়ে যেতে পারি?
আমি ঠিক ভুল শাখায় পুরোপুরি ভাল প্রতিশ্রুতিবদ্ধ করেছি। আমি কীভাবে আমার মাস্টার শাখায় শেষ প্রতিশ্রুতি পূর্বাবস্থায় ফিরিয়ে আনতে পারি এবং তারপরে সেই একই পরিবর্তনগুলি নিয়ে তা আমার আপগ্রেড শাখায় নিয়ে যেতে পারি?
উত্তর:
আপনি যদি এখনও নিজের পরিবর্তনগুলি না ঠেকেন তবে আপনি একটি সফট রিসেটও করতে পারেন:
git reset --soft HEAD^
এটি প্রতিশ্রুতি ফিরিয়ে দেবে, তবে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি আপনার সূচীতে ফিরিয়ে দেবে। একে একে একে একে শাখা তুলনামূলকভাবে আপ-টু-ডেট রয়েছে বলে ধরে নেওয়া, গিট আপনাকে অন্য শাখায় একটি চেকআউট করতে দেবে, যার পরে আপনি কেবল প্রতিশ্রুতিবদ্ধ করতে পারেন:
git checkout branch
git commit
অসুবিধাটি হ'ল আপনার প্রতিশ্রুতি বার্তাটি পুনরায় প্রবেশ করা দরকার।
git reset --soft HEAD\^
এই বিষয়ে 4 বছর দেরি হলেও এটি কারও পক্ষে সহায়ক হতে পারে।
আপনি যদি প্রতিশ্রুতিবদ্ধ হয়ে প্রতিশ্রুতিবদ্ধ হওয়ার আগে একটি নতুন শাখা তৈরি করতে ভুলে গিয়ে থাকেন এবং কতগুলি প্রতিশ্রুতিবদ্ধ না কেন, নিম্নলিখিত পদ্ধতিটি আরও সহজ:
git stash # skip if all changes are committed
git branch my_feature
git reset --hard origin/master
git checkout my_feature
git stash pop # skip if all changes were committed
এখন আপনার কাছে মাস্টার শাখা সমান origin/master
এবং সমস্ত নতুন কমিট শুরু my_feature
। দ্রষ্টব্য যে my_feature
একটি স্থানীয় শাখা, কোনও দূরবর্তী শাখা নয়।
master
, তারপরে পুনরায় সেট master
করুন origin/master
।
একটি প্রতিশ্রুতি রোলব্যাক করতে (নিশ্চিত করুন যে আপনি পরবর্তী পদক্ষেপের জন্য কমিটের হ্যাশটি নোট করেছেন):
git reset --hard HEAD^
সেই প্রতিশ্রুতিটি অন্য একটি শাখায় টানতে:
git checkout other-branch
git cherry-pick COMMIT-HASH
এছাড়াও নোট করুন যে আপনার হতে পারে যে কোনও অনিবন্ধিত এবং সংশোধিত পরিবর্তনগুলিকে হত্যাgit reset --hard
করবে , সুতরাং আপনার যদি পছন্দ হয় তবে:
git reset HEAD^
git checkout .
git rev-parse BRANCH_NAME
শা পেতে।
git reflog show <branch>
!
git stash
পুনরায় সেট করুন এবং ব্যবহারের পূর্বে git stash pop
পরে তাদের পূর্বাবস্থায় ফিরিয়ে আনুন, তাই ভয় করার কোন প্রয়োজন --hard
অংশ
আপনি যদি ইতিমধ্যে আপনার পরিবর্তনগুলিকে ধাক্কা দিয়ে থাকেন তবে আপনাকে হেডটি পুনরায় সেট করার পরে আপনার পরবর্তী ধাক্কা চাপতে হবে।
git reset --hard HEAD^
git merge COMMIT_SHA1
git push --force
সতর্কতা: একটি হার্ড রিসেট আপনার কার্যকরী অনুলিপিতে যে কোনও অনির্দিষ্ট পরিবর্তনকে পূর্বাবস্থায় ফিরিয়ে আনবে, অন্যদিকে একটি ফোর্স পুশ স্থানীয় শাখার বর্তমান অবস্থার সাথে দূরবর্তী শাখার অবস্থা সম্পূর্ণরূপে ওভাররাইট করবে।
কেবলমাত্র উইন্ডোজে (উইন্ডোজ কমান্ড লাইনটি ব্যবহার করে, ব্যাশ নয়) এটি আসলে ^^^^
একের পরিবর্তে চারটি , তাই এটি
git reset --hard HEAD^^^^
git reset --hard COMMIT_HASH
git push --force
আমি সম্প্রতি একই জিনিস করেছি, যেখানে আমি দুর্ঘটনাক্রমে মাস্টার পরিবর্তনের প্রতিশ্রুতি দিয়েছিলাম, যখন আমার অন্য শাখায় প্রতিশ্রুতিবদ্ধ হওয়া উচিত ছিল। তবে আমি কিছুই ঠেকালাম না।
আপনি যদি কেবলমাত্র ভুল শাখায় প্রতিশ্রুতিবদ্ধ থাকেন এবং এর পর থেকে কোনও কিছু পরিবর্তন করেননি এবং রেপোতে ঠেলাঠেলি করেন না, তবে আপনি নিম্নলিখিতটি করতে পারেন:
// rewind master to point to the commit just before your most recent commit.
// this takes all changes in your most recent commit, and turns them into unstaged changes.
git reset HEAD~1
// temporarily save your unstaged changes as a commit that's not attached to any branch using git stash
// all temporary commits created with git stash are put into a stack of temporary commits.
git stash
// create other-branch (if the other branch doesn't already exist)
git branch other-branch
// checkout the other branch you should have committed to.
git checkout other-branch
// take the temporary commit you created, and apply all of those changes to the new branch.
//This also deletes the temporary commit from the stack of temp commits.
git stash pop
// add the changes you want with git add...
// re-commit your changes onto other-branch
git commit -m "some message..."
দ্রষ্টব্য: উপরের উদাহরণে, আমি গিট রিসেট হেড ~ 1 এর সাথে 1 টি প্রতিশ্রুতি রিভাইন্ড করছিলাম। তবে আপনি যদি কমিটিকে রিওয়াইন্ড করতে চান, তবে আপনি গিট রিসেট করতে পারেন হেড ~ n।
এছাড়াও, আপনি যদি ভুল শাখায় প্রতিশ্রুতিবদ্ধ হয়ে শেষ করেছেন এবং ভুল শাখায় প্রতিশ্রুতিবদ্ধ হওয়ার আগে আপনি আরও কিছু কোড লিখেছেন, তবে আপনার অগ্রগতিমূলক কাজটি সংরক্ষণ করতে আপনি গিট স্ট্যাশ ব্যবহার করতে পারেন:
// save the not-ready-to-commit work you're in the middle of
git stash
// rewind n commits
git reset HEAD~n
// stash the committed changes as a single temp commit onto the stack.
git stash
// create other-branch (if it doesn't already exist)
git branch other-branch
// checkout the other branch you should have committed to.
git checkout other-branch
// apply all the committed changes to the new branch
git stash pop
// add the changes you want with git add...
// re-commit your changes onto the new branch as a single commit.
git commit -m "some message..."
// pop the changes you were in the middle of and continue coding
git stash pop
দ্রষ্টব্য: আমি এই ওয়েবসাইটটি একটি রেফারেন্স হিসাবে ব্যবহার করেছি https://www.clearvision-cm.com/blog/ কি- to- do- when- you- commit-to- the- wrong- git- branch/
git checkout -b new_branch
সেখান থেকে ঠিক করণ শেষ করেছিলাম , প্রতিশ্রুতি অক্ষত ছিল, কেবল ঠেলাঠেলি করছিল, আর পিআর তৈরি করল না, ' আবার কমিট করতে হবে না।
সুতরাং যদি আপনার পরিস্থিতি যদি আপনি প্রতিশ্রুতিবদ্ধ হন master
তবে প্রতিশ্রুতিবদ্ধ হন another-branch
(যা ইতিমধ্যে উপস্থিত থাকতে পারে এবং নাও থাকতে পারে) তবে আপনি এখনও ঠেলাঠেলি করেন নি, এটি ঠিক করা খুব সহজ।
// if your branch doesn't exist, then add the -b argument
git checkout -b another-branch
git branch --force master origin/master
এখন সব আপনার করে করতে master
হবে another-branch
।
প্রেমে উত্সাহিত : http://haacked.com/archive/2015/06/29/git-migrate/
another-branch
ইতিমধ্যে বিদ্যমান। এই ক্ষেত্রে, এটি যে কমেটগুলিতে আমি আয়ত্ত করতে চাইছিলাম তা কেবল কমিয়ে দিয়েছে এবং সেগুলি চালিত করে নি another-branch
।
সম্প্রসারিত করার এই উত্তর, যদি আপনি থেকে সরাতে, যেমন একাধিক বদ্ধ পরিকর develop
করতে new_branch
:
git checkout develop # You're probably there already
git reflog # Find LAST_GOOD, FIRST_NEW, LAST_NEW hashes
git checkout new_branch
git cherry-pick FIRST_NEW^..LAST_NEW # ^.. includes FIRST_NEW
git reflog # Confirm that your commits are safely home in their new branch!
git checkout develop
git reset --hard LAST_GOOD # develop is now back where it started
যদি আপনার জন্য, এটি প্রায় 1 টি প্রতিশ্রুতিবদ্ধ হয়, তবে আরও অনেক সহজ পুনরায় সেট করার সমাধান পাওয়া যায়। আমার জন্য, আমার প্রায় 10 টি কমিটস দুর্ঘটনাবশত এর master
পরিবর্তে করা হয়েছিল, আসুন আমরা এটি কল করিbranch_xyz
এবং আমি প্রতিশ্রুতিবদ্ধ ইতিহাস হারাতে চাইনি।
আপনি কী করতে পারেন এবং আমাকে কী সংরক্ষণ করেছিল তা এই উত্তরটি একটি রেফারেন্স হিসাবে ব্যবহার করে 4 ধাপের প্রক্রিয়া ব্যবহার করে যা হ'ল -
master
branch_xyz
master
বিশদে উপরোক্ত পদক্ষেপগুলি এখানে -
এর থেকে একটি নতুন শাখা তৈরি করুন master
(যেখানে আমি ঘটনাক্রমে অনেক পরিবর্তন করেছি)
git checkout -b temp_branch_xyz
নোট: -b
পতাকা একটি নতুন শাখা তৈরি করতে ব্যবহার করা হয়
যদি আমরা ঠিক শুধু যাচাই করার জন্য, আমি একটি দ্রুত করতে চাই git branch
নিশ্চিত হয় করতে temp_branch_xyz
শাখা এবং git log
যদি আমরা করে ঠিক করো।
অস্থায়ী শাখাটি মূলত কমিটের উদ্দেশ্যে তৈরি শাখায় মার্জ করুন branch_xyz
।
প্রথমে মূল শাখায় স্যুইচ করুন branch_xyz
( যেমন git fetch
আপনার না থাকলে আপনার প্রয়োজন হতে পারে )
git checkout branch_xyz
দ্রষ্টব্য: -b
পতাকা
এখনই ব্যবহার করা হচ্ছে না , আসুন আমরা বর্তমানে চেকআউট করেছি সেই শাখায় অস্থায়ী শাখাটি মার্জ করুনbranch_xyz
git merge temp_branch_xyz
আপনার যদি এখানে কিছু বিবাদ দেখা দেয় তবে তার যত্ন নিতে হবে। সফলভাবে মার্জ হওয়ার পরে আপনি ধাক্কা (আমি চাই) বা পরবর্তী পদক্ষেপগুলিতে যেতে পারেন।
এই উত্তরটি রেফারেন্স হিসাবে master
ব্যবহার করতে দুর্ঘটনাকবলিত কমিটিকে পূর্বাবস্থায় ফিরিয়ে আনুন , প্রথমে এটিতে স্যুইচ করুনmaster
git checkout master
তারপরে রিমোটটি (বা যদি আপনি চান তবে নির্দিষ্ট প্রতিশ্রুতিবদ্ধ) এর সাথে মেলে সমস্ত পথে ফিরে যান
git reset --hard origin/master
আবারও, git log
উদ্দেশ্য পরিবর্তনগুলি কার্যকর হয়েছে কিনা তা নিশ্চিত করার জন্য আমি আগে এবং পরে কিছু করব।
প্রমাণ মুছে ফেলা, এটি অস্থায়ী শাখা মুছে ফেলছে। এর জন্য প্রথমে আপনাকে সেই শাখাটি যাচাই করা দরকার যে টেম্পটি একত্রীকরণ করা হয়েছিল, অর্থাৎ branch_xyz
(যদি আপনি master
নীচে থেকে আদেশটি চালিয়ে যান এবং একটি পেতে error: The branch 'temp_branch_xyz' is not fully merged
পারেন), সুতরাং আসুন
git checkout branch_xyz
এবং তারপরে এই দুর্ঘটনার প্রমাণ মুছুন
git branch -d temp_branch_xyz
এই নাও.
আপনি যে শাখায় আপনার পরিবর্তনগুলি প্রয়োগ করতে চেয়েছিলেন তা ইতিমধ্যে বিদ্যমান রয়েছে ( উদাহরণস্বরূপ, শাখা বিকাশ ) নীচে ফোটানাসের দ্বারা প্রদত্ত নির্দেশাবলী অনুসরণ করুন , তারপরে:
git checkout develop
git rebase develop my_feature # applies changes to correct branch
git checkout develop # 'cuz rebasing will leave you on my_feature
git merge develop my_feature # will be a fast-forward
git branch -d my_feature
এবং অবশ্যই আপনি ব্যবহার করতে পারে tempbranch পরিবর্তে বা অন্য কোন শাখার নাম my_feature চাইলে আপনি ।
এছাড়াও, যদি প্রযোজ্য হয়, আপনি আপনার লক্ষ্য শাখায় মার্জ হওয়ার পরে স্ট্যাশ পপটি (প্রয়োগ করুন) বিলম্ব করুন।
আমার জন্য, আমি যে প্রতিশ্রুতিটি ঠেলেছি তা ফিরিয়ে দিয়ে এটি সমাধান করা হয়েছিল, তারপরে চেরি-বাছাই যা অন্য শাখায় প্রতিশ্রুতিবদ্ধ।
git checkout branch_that_had_the_commit_originally
git revert COMMIT-HASH
git checkout branch_that_was_supposed_to_have_the_commit
git cherry pick COMMIT-HASH
আপনি git log
সঠিক হ্যাশটি খুঁজে পেতে ব্যবহার করতে পারেন এবং আপনি যখনই চান এই পরিবর্তনগুলিকে ঠেলাতে পারেন!