[git] আমি কিভাবে গিট সবচেয়ে সাম্প্রতিক Commits পূর্বাবস্থায় ফেরাতে পারি?


14 Answers

যদি আপনি এটি কিভাবে কাজ করে তা জানি না একটি কমিটি পূর্বাবস্থায় ফিরিয়ে আনা একটু ভয়ঙ্কর। কিন্তু আপনি যদি বুঝতে পারেন তবে এটি আসলে আশ্চর্যজনকভাবে সহজ।

বলুন আপনি এই আছে, যেখানে সি আপনার মাথা এবং (F) আপনার ফাইলের অবস্থা।

   (F)
A-B-C
    ↑
  master

আপনি Cuke nuke করতে চান এবং এটি আবার দেখতে না । তুমি এটা করো:

git reset --hard HEAD~1

ফলাফল হলো:

 (F)
A-B
  ↑
master

এখন বি হেড। কারণ আপনি ব্যবহার করেছেন - আপনার ফাইলগুলি বিটি এ তাদের রাজ্যে পুনরায় সেট করা হয়।

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

   (F)
A-B-C
    ↑
  master

আপনি এই কাজ করতে পারেন, - --hard বন্ধ:

git reset HEAD~1

এই ক্ষেত্রে ফলাফল হল:

   (F)
A-B-C
  ↑
master

উভয় ক্ষেত্রে, HEAD সর্বশেষ কমিটির একটি পয়েন্টার। আপনি যখন একটি জিট git reset HEAD~1 , তখন আপনি GIT কে একটি পয়েন্ট ফেরত পাঠাতে HEAD পয়েন্টারটি সরান। কিন্তু (যদি না আপনি --hard ব্যবহার করেন) আপনি আপনার ফাইলগুলি যেভাবে --hard ছেড়ে দিন। সুতরাং এখন git status দেখায় যে আপনি সি তে চেক করেছেন। আপনি কোনও জিনিস হারিয়েছেন না!

হালকা স্পর্শের জন্য, আপনি এমনকি আপনার কমিটি পূর্বাবস্থায় ফিরিয়ে আনতে পারেন কিন্তু আপনার ফাইল এবং আপনার index ছেড়ে দিতে পারেন:

git reset --soft HEAD~1

এটি শুধুমাত্র আপনার ফাইলগুলিকে একমাত্র ছেড়ে দেয় না, এটি এমনকি আপনার সূচীকে ছেড়ে দেয়। যখন আপনি git status , তখন আপনি দেখতে পাবেন যে একই ফাইল git status আগে থেকেই রয়েছে। প্রকৃতপক্ষে, এই কমান্ডের পরে, আপনি git commit করতে পারেন এবং আপনি ঠিক একই অঙ্গীকার পুনর্বিবেচনা করতে চান।

একাধিক জিনিস: ধরুন আপনি প্রথম উদাহরণ হিসাবে একটি কমিট ধ্বংস , কিন্তু তারপর আবিষ্কার আপনি সব পরে এটি প্রয়োজন ? শক্ত ভাগ্য, ঠিক আছে?

না, এটি ফিরে পেতে এখনও একটি উপায় আছে। টাইপ git reflog এবং আপনি আশেপাশে স্থানান্তরিত git reflog (আংশিক) git reflog একটি তালিকা দেখতে পাবেন। আপনি যে git reflog ধ্বংস করেছেন তা খুঁজুন এবং এটি করুন:

git checkout -b someNewBranchName shaYouDestroyed

আপনি এখন যে কমিটি পুনরুজ্জীবিত হয়েছে। কিছুটা 90 দিনের জন্য গিটে আসলেই ধ্বংস হয় না, তাই সাধারণত আপনি ফিরে যেতে পারেন এবং পরিত্রাণ পেতে চাইছেন এমন উদ্ধারকারীকে আপনি উদ্ধার করতে পারেন।

Question

আমি দুর্ঘটনাক্রমে ভুল ফাইলটি করেছি Git , কিন্তু আমি এখনও সার্ভারে কমিট ধাক্কা না।

আমি কিভাবে স্থানীয় রিপোজিটরি থেকে এগুলি পূর্বাবস্থায় ফিরিয়ে আনতে পারি?




জিনিসগুলি পেতে চান এমন ফাইল যুক্ত করুন / অপসারণ করুন:

git rm classdir
git add sourcedir

তারপর কমিটি সংশোধন:

git commit --amend

পূর্ববর্তী, ত্রুটিপূর্ণ কমিটি নতুন সূচক রাষ্ট্র প্রতিফলিত করার জন্য সম্পাদিত হবে - অন্য কথায়, এটি এমন হবে যেন আপনি প্রথম স্থানে ভুল করে না।

আপনি যদি ধাক্কা না দিয়ে থাকেন তবে শুধুমাত্র এটিই করা উচিত। যদি আপনি ধাক্কা দিয়ে থাকেন, তবে আপনাকে অবশ্যই একটি ফিক্স করতে হবে।




আপনার commits এবং গাছ দেখতে SourceTree (গিট জন্য গ্রাফিক্যাল টুল) ব্যবহার করুন । আপনি সরাসরি ডান ক্লিক করে এটি সরাসরি রিসেট করতে পারেন।




যদি আপনি শেষ কমিটিতে ফাইলগুলি সরাতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

git reset --soft HEAD~ 

এবং যদি শেষ কমিটিতে ফাইলগুলির প্রয়োজন হয় তবে আপনি এটি ব্যবহার করতে পারেন:

git reset --hard HEAD~1



একটি একক কমান্ড:

git reset --soft 'HEAD^' 

এটা শেষ স্থানীয় কমিটি পূর্বাবস্থায় ফেরার জন্য মহান কাজ করে!




আপনি স্থায়ীভাবে এটি পূর্বাবস্থায় ফিরিয়ে আনতে চান এবং আপনি কিছু সংগ্রহস্থল ক্লোন করেছেন

কমিটি আইডি দ্বারা দেখা যাবে

git log 

তারপর আপনি করতে পারেন -

git reset --hard <commit_id>

git push origin <branch_name> -f



আমি আমাদের শেয়ার্ড রিপোজিটরিতে সর্বশেষ 5 টি কাজ পূর্বাবস্থায় ফিরিয়ে আনতে চেয়েছিলাম। আমি পুনর্বিবেচনা চেয়েছিলেন যে সংশোধন আইডি লাগছিল। তারপর আমি নিম্নলিখিত টাইপ।

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To git@bitbucket.org:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>



যদি আপনি সম্পূর্ণরূপে স্থানীয় কমিটি পূর্বাবস্থায় ফিরিয়ে আনতে চান তবে আপনি যা যা পরিবর্তন করেছেন তা কমিটিতে করেছেন, এবং যদি আপনি এটি সম্পর্কে কিছু না চিনেন তবে নিচের কমান্ডটি ব্যবহার করুন।

git reset --hard HEAD^1

(এই কমান্ডটি আপনার সমগ্র কমিটি উপেক্ষা করবে এবং আপনার স্থানীয় ক্রিয়াকলাপের গাছ থেকে আপনার পরিবর্তন সম্পূর্ণরূপে হারিয়ে যাবে)। আপনি যদি আপনার কমিটি পূর্বাবস্থায় ফিরিয়ে আনতে চান, তবে আপনি স্টেজিং এরিয়াতে আপনার পরিবর্তনগুলি চান ( git add পরে git add আগে) তাহলে নিম্নোক্ত কমান্ডটি করুন।

git reset --soft HEAD^1

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

git reset HEAD

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

More




শেষ কমিট পরিবর্তন করতে

সূচী মধ্যে ফাইল প্রতিস্থাপন করুন:

git rm --cached *.class
git add *.java

তারপর, এটি যদি একটি ব্যক্তিগত শাখা হয় তবে কমিটিটি সংশোধন করুন:

git commit --amend

অথবা, যদি এটি একটি ভাগ করা শাখা হয় তবে একটি নতুন কমিটি তৈরি করুন:

git commit -m 'Replace .class files with .java files'


( পূর্ববর্তী কমিটি পরিবর্তন করতে, সন্ত্রস্ত ইন্টারেক্টিভ রিবেস ব্যবহার করুন)

ProTip ™: এটি আবার ঘটতে বন্ধ করার জন্য একটি gitignore *.class .class যোগ করুন।

একটি কমিট ফিরে

যদি আপনি শেষ কমিট পরিবর্তন করতে চান তবে একটি কমিটি সংশোধন আদর্শ সমাধান, তবে একটি সাধারণ সমাধানটি reset

আপনি যে কোনও কমিটিতে জিট রিসেট করতে পারেন:

git reset @~N

যেখানে N হাইডের আগে HEAD সংখ্যা, এবং @~ পূর্ববর্তী কমিটিতে পুনরায় সেট করে।

সুতরাং, পরিবর্তনের পরিবর্তে, আপনি ব্যবহার করতে পারেন:

git reset @~
git add *.java
git commit -m "Add .java files"

--soft git help reset পরীক্ষা করে দেখুন, বিশেষ করে বিভাগগুলিতে --soft এবং --soft , এটি কী করে তা আরও ভাল বোঝার জন্য।

Reflog

আপনি জগাখিচুড়ি আপ, আপনি সর্বদা ড্রপ কমিট খুঁজে পেতে রিফ্লগ ব্যবহার করতে পারেন:

$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started





টাইপ করুন git logএবং শেষ কমিটি হ্যাশ কোড খুঁজুন এবং তারপর লিখুন:

git reset <the previous co>



"সর্বশেষ কমিটিতে কাজ গাছ পুনরায় সেট করুন"

git reset --hard HEAD^ 

"কাজের গাছ থেকে পরিষ্কার অজানা ফাইল"

git clean    

দেখুন - গিট দ্রুত রেফারেন্স

দ্রষ্টব্য: এই কমান্ডটি আপনার পূর্ববর্তী কমিটি মুছে ফেলবে, তাই সাবধানতার সাথে ব্যবহার করুন! git reset --hardনিরাপদ




সহজ, আপনার কমান্ড লাইনে এটি চালান:

 git reset --soft HEAD~ 



অন্য উপায়:

আপনি যে শাখাটি ফিরতে চান সেটি চেকআউট করুন, তারপরে আপনার স্থানীয় কাজ অনুলিপিটিকে রিমোট সার্ভারে সর্বশেষতম হতে চাইলে এটি পুনরায় সেট করুন (এটি বাই-বাই দ্বারা চলে যাবে)। এটি করার জন্য, SourceTree আমি ডানদিকে ক্লিক করেছি এবং "এই কমিটিতে BRANCHNAME রিসেট করুন" নির্বাচন করুন।

তারপরে আপনার সংগ্রহস্থলের স্থানীয় ডিরেক্টরির মধ্যে নেভিগেট করুন এবং এই কমান্ড চালান:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

এটি আপনার স্থানীয় রিপোজিটরিতে বর্তমানের পরে সমস্তটি কেবল মুছে ফেলবে তবে শুধুমাত্র সেই শাখার জন্য।




কিভাবে শেষ গিট কমিটি পূর্বাবস্থায় ফেরাবেন?

শেষ কমিটির আগে যা কিছু ছিল তা সব ফিরিয়ে আনতে, HEAD এর আগে কমিটিতে রিসেট করতে হবে।

  1. আপনি যদি আপনার পরিবর্তনগুলি রাখতে চান না তবে:

    git reset --hard HEAD^
    
  2. আপনি যদি আপনার পরিবর্তন রাখতে চান:

    git reset --soft HEAD^
    

এখন আপনার গিট লগ চেক করুন। এটা আমাদের সর্বশেষ কমিটি মুছে ফেলা হয়েছে যে দেখাবে।




পূর্ববর্তী স্থানীয় কমিট ঠিক কিভাবে

git commit --amend -gui (বা অনুরূপ) ব্যবহার করুন একটি git commit --amend সঞ্চালন - git commit --amend । GUI থেকে আপনি কমিট থেকে পৃথক ফাইল যোগ বা অপসারণ করতে পারেন। আপনি প্রতিশ্রুতি বার্তা পরিবর্তন করতে পারেন।

পূর্ববর্তী স্থানীয় কমিটি পূর্বাবস্থায় ফিরিয়ে আনুন কিভাবে

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

সতর্কবার্তা শব্দ : git reset অযৌক্তিক ব্যবহার আপনার বিভ্রান্তিকর অবস্থায় আপনার কাজ কপি পেতে একটি ভাল উপায়। আমি সুপারিশ করি যে জিট উপন্যাসগুলি যদি তারা করতে পারে তবে এটি এড়াতে পারে।

কিভাবে একটি পাবলিক কমিটি পূর্বাবস্থায় ফিরিয়ে আনুন

পরিবর্তনগুলি পূর্বাবস্থায় git-revert বিপরীত চেরি পিক ( git-revert ) করুন।

আপনি যদি এখনও আপনার শাখায় অন্যান্য পরিবর্তন টানা না থাকেন তবে আপনি কেবল তা করতে পারেন ...

git revert --no-edit HEAD

তারপরে আপনার আপডেট হওয়া শাখাকে ভাগ করা সংগ্রহস্থলটিতে ধাক্কা দিন।

কমিটি ইতিহাস পৃথকভাবে commits উভয় প্রদর্শন করা হবে

উন্নত: পাবলিক রিপোজিটরিতে ব্যক্তিগত শাখা সংশোধন

এটি বিপজ্জনক হতে পারে - নিশ্চিত হোন যে আপনার শাখাটির একটি স্থানীয় অনুলিপি রয়েছে যাতে তাড়াহুড়ো করা যায়।

এছাড়াও নোট করুন: কেউ যদি শাখায় কাজ করতে পারে তবে আপনি এটি করতে চান না।

git push --delete (branch_name) ## remove public version of branch

স্থানীয়ভাবে আপনার শাখা পরিষ্কার করুন তারপর repush ...

git push origin (branch_name)

স্বাভাবিক ক্ষেত্রে, সম্ভবত আপনার প্রাইভেট-শাখাটি ইতিহাসকে পুরাতন হওয়ার বিষয়ে আপনার উদ্বিগ্ন হওয়ার দরকার নেই। শুধু একটি ফলোআপ কমিটি ধাক্কা দিন (উপরে 'কীভাবে একটি পাবলিক কমিটি পূর্বাবস্থায় ফিরিয়ে আনা যায়' দেখুন) এবং পরে, ইতিহাস লুকানোর জন্য squash-merge ।




Related