প্রথমে "আপনার শাখাটি 3 টি কমিটের মাধ্যমে উত্স / মাস্টারের চেয়ে এগিয়ে" পেয়েছে তারপরে আমার অ্যাপ্লিকেশনটি পূর্বের পরিবর্তনগুলির সাথে পূর্ববর্তী সময়ে ফিরে গেছে।
আমি শেষ 11 ঘন্টা ব্যয় করে কীভাবে ফিরে পেতে পারি?
প্রথমে "আপনার শাখাটি 3 টি কমিটের মাধ্যমে উত্স / মাস্টারের চেয়ে এগিয়ে" পেয়েছে তারপরে আমার অ্যাপ্লিকেশনটি পূর্বের পরিবর্তনগুলির সাথে পূর্ববর্তী সময়ে ফিরে গেছে।
আমি শেষ 11 ঘন্টা ব্যয় করে কীভাবে ফিরে পেতে পারি?
উত্তর:
git reflogতোমার বন্ধু. আপনি যে তালিকায় থাকতে চান সেই প্রতিশ্রুতিটি সন্ধান করুন এবং আপনি এটিতে পুনরায় সেট করতে পারেন (উদাহরণস্বরূপ git reset --hard e870e41:)।
(যদি আপনি নিজের পরিবর্তনগুলি না করেন ... আপনি সমস্যায় পড়তে পারেন - তাড়াতাড়ি প্রতিশ্রুতি দিন এবং প্রায়শই প্রতিশ্রুতি দিন!)
git log HEAD@{1}। এটি যদি কমিটের সঠিক সিরিজের মতো মনে হয় তবে আপনি এটি করতে পারেন git reset HEAD@{1}।
git fsck --lost-found।
উত্তর দেওয়ার আগে আসুন এটি কী তা ব্যাখ্যা করে কিছু পটভূমি যুক্ত করা যাক HEAD।
First of all what is HEAD?HEADকেবলমাত্র বর্তমান শাখায় বর্তমান প্রতিশ্রুতি (সর্বশেষ) এর একটি উল্লেখ। যে কোনও সময়
কেবলমাত্র একা HEADথাকতে পারে (বাদে git worktree)।
এর সামগ্রীটি HEADভিতরে সঞ্চিত .git/HEADরয়েছে এবং এতে বর্তমান প্রতিশ্রুতিতে 40 বাইট এসএইএ -1 রয়েছে।
detached HEADআপনার উপর না হন, তাহলে সর্বশেষ কমিট - অর্থ যে HEADএকটি পূর্বে নির্দেশ করা হয় ইতিহাস বলা হচ্ছে এ কমিট detached HEAD।
কমান্ড লাইনে এটি দেখতে দেখতে - শাখা নামের পরিবর্তে SHA-1 HEADহ'ল যেহেতু বর্তমান শাখার অগ্রভাগের দিকে ইশারা করছে না:
git checkoutgit checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
এটি পছন্দসই প্রতিশ্রুতি নির্দেশ করে নতুন শাখাটি চেকআউট করবে।
এই আদেশটি প্রদত্ত প্রতিশ্রুতিতে চেকআউট করবে।
এই মুহুর্তে, আপনি একটি শাখা তৈরি করতে পারেন এবং এই বিন্দু থেকে কাজ শুরু করতে পারেন।
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# Create a new branch forked to the given commit
git checkout -b <branch name>
git reflogআপনি সর্বদা reflogপাশাপাশি ব্যবহার করতে পারেন ।
git reflog আপডেট হওয়া যে কোনও পরিবর্তন প্রদর্শন করবে HEADএবং কাঙ্ক্ষিত রিফ্লগ এন্ট্রি চেক HEADকরা এই প্রতিশ্রুতিতে ফিরে আসবে।
যতবারই হেডের সংশোধন করা হয় সেখানে একটি নতুন প্রবেশ থাকবে reflog
git reflog
git checkout HEAD@{...}
এটি আপনাকে আপনার কাঙ্ক্ষিত প্রতিশ্রুতিতে ফিরিয়ে আনবে
git reset --hard <commit_id>আপনার হেডকে পছন্দসই প্রতিশ্রুতিতে "সরান"।
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
git rebase --no-autostash।git revert <sha-1>প্রদত্ত প্রতিশ্রুতি বা প্রতিশ্রুতি ব্যাপ্তি "পূর্বাবস্থায় ফিরিয়ে দিন"।
রিসেট কমান্ড প্রদত্ত প্রতিশ্রুতিতে যে কোনও পরিবর্তন "পূর্বাবস্থায়" ফেলবে।
পূর্বাবস্থায় ফিরিয়ে আনার সাথে একটি নতুন অঙ্গীকারবদ্ধ প্রতিশ্রুতিবদ্ধ হবে এবং আসল প্রতিশ্রুতি ইতিহাসেও থাকবে।
# Add a new commit with the undo of the original one.
# The <sha-1> can be any commit(s) or commit range
git revert <sha-1>
এই স্কিমাটি বোঝায় যে কোন আদেশটি কী করে।
আপনি যেহেতু দেখতে পাচ্ছেন, reset && checkoutপরিবর্তন করুন HEAD।
git reset --hard <commit_id>, অপসারণ HEAD! গ্রাফিকাল উপস্থাপনা জন্য +1 !!
git reflog <branchname>বেশ কার্যকর হতে পারে, যেহেতু আপনি কেবল একটি শাখার পরিবর্তনগুলি দেখেন।
মুছে ফেলা কমিট করার আরও একটি উপায় হ'ল git fsckকমান্ডটি দিয়ে।
git fsck --lost-found
এটি শেষ লাইনে এমন কিছু আউটপুট দেবে:
dangling commit xyz
reflogঅন্যান্য জবাব হিসাবে প্রস্তাবিত হিসাবে আমরা এটি একই প্রতিশ্রুতিবদ্ধ তা পরীক্ষা করতে পারি । এখন আমরা একটি করতে পারিgit merge
git merge xyz
দ্রষ্টব্য:
আমরা fsckযদি ইতিমধ্যে একটি git gcকমান্ড চালিয়েছি যা ঝুঁকিপূর্ণ অঙ্গীকারের রেফারেন্সটি সরিয়ে ফেলবে তবে আমরা প্রতিশ্রুতি ফিরে পেতে পারি না ।