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




git-commit git-reset (20)

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

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


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

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 ।


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

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

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 [email protected]{0}: reset: moving to @~
2c52489 [email protected]{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started



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

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. এই আপনি পূর্বাবস্থায় ফেরাতে চান
  2. এটি আপনার কার্যক্ষেত্রের গাছ (ডিস্কে আপনার ফাইলগুলির অবস্থা) অপরিবর্তিত রাখে তবে কমিটিকে অনির্বাচিত করে এবং আপনি যে পরিবর্তনগুলি করেছেন তা পরিবর্তনগুলি ছেড়ে দেয় (যাতে তারা git status "কমিটির জন্য সংঘবদ্ধ না হয়ে পরিবর্তনগুলি" হিসাবে প্রদর্শিত হবে এবং আপনাকে এটি করতে হবে সম্পাদন করার আগে আবার তাদের যোগ করুন)। যদি আপনি পূর্ববর্তী git reset --soft HEAD~ আরও বেশি পরিবর্তন যুক্ত করতে চান, অথবা প্রেরণ বার্তা 1 পরিবর্তন করতে চান তবে আপনি git reset --soft HEAD~ পরিবর্তে ব্যবহার করতে পারেন, যা git reset --soft HEAD~ git reset HEAD~ (যেখানে HEAD~ HEAD~1 ) কিন্তু আপনার বিদ্যমান পরিবর্তন মঞ্চে পাতা।
  3. কাজ গাছ ফাইল সংশোধন করা।
  4. আপনি আপনার নতুন কমিটিতে অন্তর্ভুক্ত করতে চান যে কিছু git add
  5. পুরানো প্রতিশ্রুতি বার্তা পুনঃব্যবহার, পরিবর্তন কমিট। পুরানো মাথা অনুলিপি করুন .git/ORIG_HEAD ; -c ORIG_HEAD সাথে -c ORIG_HEAD একটি সম্পাদক খুলবে, যা প্রাথমিকভাবে পুরানো -c ORIG_HEAD লগ বার্তাটি ধারণ করে এবং এটি সম্পাদনা করার অনুমতি দেয়। যদি আপনি বার্তাটি সম্পাদনা করতে না চান তবে আপনি -C বিকল্পটি ব্যবহার করতে পারেন।

তবে যদি আপনি সূচীতে কোনও নতুন পরিবর্তন যুক্ত করেছেন তবে সতর্ক করুন - commit --amend ব্যবহার করে আপনার পূর্ববর্তী commit --amend এটি যুক্ত হবে।

যদি কোড ইতিমধ্যে আপনার সার্ভারে push করা হয় এবং আপনার ইতিহাস (রিবেস) তারপর ওভাররাইট করার অনুমতি আছে:

git push origin master --force

আপনি এই উত্তরটি দেখতে পারেন:

কিভাবে একটি পূর্ববর্তী অবস্থান ফিরে শিরোনাম সরানো? (বিচ্ছিন্ন মাথা)

উপরোক্ত উত্তরটি আপনাকে git reflog যা SHA-1 git reflog আপনি প্রত্যাবর্তন করতে চান তা খুঁজে বের করতে ব্যবহার করা হয়। উপরে বর্ণিত কমান্ডের ক্রমটি ব্যবহার করতে আপনি পূর্বাবস্থায় ফিরতে চান এমন বিন্দুটি একবার খুঁজে পেয়েছেন।

1 দ্রষ্টব্য, যাইহোক, যদি আপনি আপনার প্রত্যুত্তর বার্তাটিতে ভুল করে থাকেন তবে আপনাকে পূর্ববর্তী কমিটিতে রিসেট করতে হবে না। সহজ বিকল্পটি git reset (আপনার থেকে যেকোন পরিবর্তনগুলি git commit --amend ) git reset করতে হবে এবং তারপরে - git commit --amend , যা আপনার ডিফল্ট git commit --amend বার্তা সম্পাদকটি শেষ প্রেরণ বার্তাটির সাথে প্রাক-জনসংখ্যাটি খুলবে।


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

git reset --hard HEAD^ 

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

git clean    

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

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


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


আপনি জাঙ্ক প্রতিশ্রুতিবদ্ধ কিন্তু ধাক্কা না,

git reset --soft HEAD~1

মাথা ~ 1 মাথা আগে কমিটির জন্য একটি shorthand হয়। আপনি যদি রিসেট করতে চান তবে বিকল্পভাবে আপনি হ্যাশের SHA-1 পড়ুন। --soft বিকল্পটিটি মুছে ফেলবে তবে এটি আপনার সমস্ত পরিবর্তিত ফাইলগুলিকে "প্রতিশ্রুতিবদ্ধ করা পরিবর্তনগুলি" ছেড়ে দেবে, কারণ গিট স্ট্যাটাস এটি স্থাপন করবে।

হেড ব্যবহার করার আগে কমিটি " --hard " এর পরিবর্তে কাজকারী গাছের ট্র্যাক হওয়া ফাইলগুলির যেকোনো পরিবর্তন পরিত্রাণ পেতে চান।

অথবা

যদি আপনি ইতিমধ্যে ধাক্কা দেন এবং যে কেউ টানা থাকে তবে সাধারণত আমার ক্ষেত্রে, আপনি গিট রিসেট ব্যবহার করতে পারবেন না। তবে আপনি একটি গিট ফিরে করতে পারেন,

git revert HEAD

এটি একটি নতুন কমিটি তৈরি করবে যা দুর্ঘটনাজনিত কমিটির দ্বারা উপস্থাপিত সবকিছুকে বিপরীত করে।


আমার ক্ষেত্রে আমি দুর্ঘটনাক্রমে এমন কিছু ফাইল করেছি যা আমি চাই না। তাই আমি নিম্নলিখিত কাজ করে এবং এটি কাজ করে:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Gitk বা git লগের সাথে ফলাফল যাচাই করুন - স্ট্যাট


আমি আমাদের শেয়ার্ড রিপোজিটরিতে সর্বশেষ 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 [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

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

git reset --soft 'HEAD^' 

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


একটি সঠিক রাষ্ট্র খুঁজে পেতে রিফ্লগ ব্যবহার করুন

git reflog

রিসেট আগে রিফ্রেশ

সঠিক রিফ্লগ নির্বাচন করুন (আমার ক্ষেত্রে f3cb6e2) এবং টাইপ করুন

git reset --hard f3cb6e2

তারপরে রেপো হেড যে HEADID রিসেট করা হবে রিসেট পর লগ

অবশেষে reflog নীচের ছবি মত দেখায়

রিফোল শেষ


এটি সম্পর্কে চিন্তা করার জন্য একটি সময় নিয়েছে, তাই সম্ভবত এই কেউ সাহায্য করবে ...

আপনার শেষ কমিটিটি "পূর্বাবস্থায় ফিরিয়ে আনুন" করার দুটি উপায় রয়েছে, আপনি ইতিমধ্যে আপনার সম্প্রদায়কে জনসাধারণের কাছে প্রকাশ করেছেন কিনা তা নির্ভর করে (আপনার রিমোট রিপোজিটরিতে ধাক্কা দেওয়া হয়েছে):

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

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

git log
    commit 101: bad commit    # latest commit, this would be called 'HEAD'
    commit 100: good commit   # second to last commit, this is the one we want

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

git reset --soft HEAD^     # use --soft if you want to keep your changes
git reset --hard HEAD^     # use --hard if you don't care about keeping the changes you made

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

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

আপনি যদি ইতিমধ্যেই আপনার মতামত প্রকাশ করে থাকেন তবে আপনি একটি নতুন কমিটি তৈরি করতে চান যা আপনার পূর্ববর্তী কমিটির (বর্তমান HEAD) করা পরিবর্তনগুলিতে "প্রত্যাবর্তন" করবে।

git revert HEAD

আপনার পরিবর্তনগুলি এখন ফিরিয়ে আনা হবে এবং আপনার জন্য প্রস্তুত হতে প্রস্তুত হবে:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

আরো তথ্যের জন্য, গিট বুনিয়াদি চেক আউট - জিনিস পূর্বাবস্থায় ফিরিয়ে আনুন


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

git rm classdir
git add sourcedir

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

git commit --amend

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

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


প্রথম রান:

git reflog

এটি আপনাকে আপনার সংগ্রহস্থলের উপর সঞ্চালিত সমস্ত সম্ভাব্য কর্ম দেখাবে, উদাহরণস্বরূপ, কমিট, মার্জ, পুল, ইত্যাদি।

তারপর করবেন:

git reset --hard ActionIdFromRefLog

যদি আপনার Git Extras ইনস্টল করা থাকে, git undo আপনি সর্বশেষ git undo ফেরাতে পূর্বাবস্থায় git undo পারেন। git undo 3 শেষ 3 টি কাজ পূর্বাবস্থায় git undo 3 আনবে।


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

git reset --hard HEAD~1

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

git reset --soft HEAD~1

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

git reset --hard HEAD^1

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

git reset --soft HEAD^1

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

git reset HEAD

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

More


SourceTree (GitHub এর জন্য GUI) এ, আপনি SourceTree ডান-ক্লিক করতে পারেন এবং একটি 'বিপরীত Commit' করতে পারেন। এই আপনার পরিবর্তন পূর্বাবস্থায় ফেরানো উচিত।

টার্মিনালে:

আপনি বিকল্পভাবে ব্যবহার করতে পারেন:

git revert

বা:

git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.

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

git reset <the previous co>

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

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

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

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

    git reset --soft HEAD^
    

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


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

git reset --soft HEAD~ 




git-revert