git একটি পূর্ববর্তী কমিট একটি গিট রিপোজিটরি ফিরে কিভাবে




গিটহাব কি (24)

সাবধান! এই কমান্ডটি ভুলের ভুল ভুল করে রাখলে, প্রতারণার ইতিহাস হারাতে পারে। সর্বদা আপনার গিট অতিরিক্ত অতিরিক্ত ব্যাকআপ আছে যেখানে অন্য কিছু যদি আপনি ভুল করেন তবে আপনি আরও নিরাপদ। :)

আমারও অনুরূপ সমস্যা ছিল এবং আমি আগের কমিটিতে ফিরে যেতে চেয়েছিলাম। আমার ক্ষেত্রে আমি তাই ব্যবহৃত আমি নতুন কমিটি রাখা intetessered ছিল না Hard

এইভাবে আমি এটা করেছি:

git reset --hard CommitId && git clean -f

এটি git push -fরিমোট রিপোজিটরি আপডেট করার পরে এখানে স্থানীয় রিপোজিটরিতে ফিরে আসবে ।

git push -f

আমি কিভাবে আমার বর্তমান অবস্থা থেকে একটি নির্দিষ্ট কমিটিতে একটি স্ন্যাপশট থেকে ফিরে পেতে পারি?

আমি git log , তাহলে আমি নিম্নলিখিত আউটপুট পেতে পারি:

$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <[email protected]>
Date:   Thu Nov 4 18:59:41 2010 -0400

blah blah blah...

commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <[email protected]>
Date:   Thu Nov 4 05:13:39 2010 -0400

more blah blah blah...

commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <[email protected]>
Date:   Thu Nov 4 00:55:06 2010 -0400

And yet more blah blah...

commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <[email protected]>
Date:   Wed Nov 3 23:56:08 2010 -0400

Yep, more blah blah.

কিভাবে 3 নভেম্বর থেকে কমিট ফেরত করবেন, অর্থাত 0d1d7fc কমিট?


পূর্ববর্তী কমিটিতে ফিরে যাওয়ার জন্য এখানে একটি সরল উপায় (এবং এটি একটি অসামঞ্জস্যপূর্ণ অবস্থায় রয়েছে, যা আপনি চান তা করতে):

git reset HEAD~1

তাই, commit আইডস এবং তাই করার কোন প্রয়োজন :)


আপনি নিজেকে এই সব প্রাথমিক পদক্ষেপগুলি সম্পূর্ণ করতে পারেন এবং রিপ গিটে ফিরিয়ে আনতে পারেন।

  1. git pull --allকমান্ডটি ব্যবহার করে বিটবাকিট থেকে আপনার সংগ্রহস্থলের সর্বশেষ সংস্করণ টানুন ।

  2. আপনার টার্মিনাল থেকে -n4 দিয়ে গিট লগ কমান্ডটি চালান। আপনার স্থানীয় ইতিহাসের সাম্প্রতিকতম কমিটি থেকে শুরু হওয়া লগের সংখ্যাগুলি নির্ধারণ করার পরে -n সংখ্যাটি নির্ধারণ করে।

    $ git log -n 4

  3. আপনার রিপোজিটরির ইতিহাসের প্রধানটি রিসেট করুন git reset --hard HEAD~Nযেখানে এন হল যেখানে আপনি মাথা ফিরে নিতে চান এমন সংখ্যাগুলি। নিম্নোক্ত উদাহরণে মাথার জন্য রিপোজিটরি ইতিহাসের সর্বশেষ কমিটিতে একটি কমিটি সেট করা হবে:

  4. পরিবর্তন git push --forceচাপ ধাক্কা ব্যবহার করে গিট repo পরিবর্তন ধাক্কা।

আপনি একটি পূর্ববর্তী কমিট গিট রিপোজিটরি চান

git pull --all
git reset --hard HEAD~1
git push --force

জেফমি এর সমাধানগুলির অতিরিক্ত বিকল্প

Jefromi এর সমাধান অবশ্যই সেরাতম , এবং আপনি অবশ্যই তাদের ব্যবহার করা উচিত। যাইহোক, সম্পূর্ণতার জন্য, আমি এই বিকল্প বিকল্পগুলিও দেখাতে চেয়েছিলাম যা একটি কমিট ফিরিয়ে আনতে ব্যবহার করা যেতে পারে (এই অর্থে যে আপনি একটি নতুন কমিটি তৈরি করেছেন যা পূর্ববর্তী কমিটিতে পরিবর্তনগুলিকে অদলবদল করে , ঠিক যেমনটি git revert করে) ।

স্পষ্ট হতে, এই বিকল্পগুলি প্রত্যাবর্তন করার সেরা উপায় নয় , জেরফমি এর সমাধানগুলি আছে , তবে আমি কেবল বলতে চাই যে আপনি একই পদ্ধতিটি git revert প্রত্যাহারের জন্য একই পদ্ধতিগুলি ব্যবহার করতে পারেন।

বিকল্প 1: হার্ড এবং নরম রিসেট

গিটের এসএএইচএ হ্যাশের একটি কমিটিতে ফিরে যাওয়ার জন্য চার্লস বেইলিয়ের সমাধানটি খুব সামান্য সংশোধিত সংস্করণ ? :

# Reset the index to the desired commit
git reset --hard <commit>

# Move the branch pointer back to the previous HEAD
git reset --soft [email protected]{1}

# Commit the changes
git commit -m "Revert to <commit>"

এটি মূলত এটি ব্যবহার করে কাজ করে যা নরম রিসেট সূচী / স্টেজিং-এরিয়াতে পূর্ববর্তী কমিটির অবস্থান ছেড়ে দেবে, যা আপনি পরে করতে পারেন।

বিকল্প 2: বর্তমান গাছটি মুছে দিন এবং নতুন একটিকে প্রতিস্থাপন করুন

এই সমাধানটি সুইচ এর সমাধান থেকে চেকআউট পুরানো কমিট থেকে আসে এবং এটি একটি নতুন কমিটি তৈরি করে :

git rm -r .
git checkout <commit> .
git commit

একইভাবে বিকল্প # 1 থেকে, এটি <commit> বর্তমান কাজ কপি অবস্থায় পুনঃপ্রবর্তন করে। প্রথমে git rm করতে হবে কারণ git checkout <commit> থেকে যে ফাইলগুলি যুক্ত করা হয়েছে তা সরিয়ে দেবে না।


আমি গিটে স্থানীয় পরিবর্তনগুলি প্রত্যাহার করার অনেকগুলি উপায় চেষ্টা করেছি, এবং মনে হচ্ছে এটি সর্বশেষ কাজ করে যদি আপনি কেবল সর্বশেষ কমিটিতে ফিরে যেতে চান।

git add . && git checkout master -f

ছোট বিবরণ:

  • git revert হিসাবে এটি কোন commits তৈরি করবে না।
  • এটি আপনার git checkout <commithashcode> মত git checkout <commithashcode> আলাদা করে না git checkout <commithashcode> করে।
  • এটি আপনার সমস্ত স্থানীয় পরিবর্তনগুলি ওভাররাইড করবে এবং শাখায় শেষ কমিটির পরে সমস্ত সংযুক্ত ফাইল মুছে ফেলবে।
  • এটি শুধুমাত্র শাখার নামগুলির সাথে কাজ করে, তাই আপনি এই ভাবে শাখায় কেবল সর্বশেষ কমিটিতে ফিরে যেতে পারেন।

আমি উপরে ফলাফল অর্জন করার জন্য আরো অনেক সুবিধাজনক এবং সহজ উপায় পাওয়া যায়:

git add . && git reset --hard HEAD

হেড আপনি বর্তমান শাখা সর্বশেষ কমিট নির্দেশ করে যেখানে।

এটি boulder_ruby প্রস্তাবিত একই কোড কোড, তবে আমি জিট git add . git reset --hard HEAD করার আগে - শেষ git reset --hard HEAD থেকে তৈরি সমস্ত নতুন ফাইল মুছে ফেলার জন্য git reset --hard HEAD হ'ল, যেহেতু সাম্প্রতিক কমিটিতে প্রত্যাবর্তন করার পরে বেশিরভাগ লোকেরা আমি বিশ্বাস করি।


রোলব্যাকের জন্য (বা প্রত্যাবর্তন করতে):

  1. জিট রিভার্ট - নো-কমিট "কমিট-কোড টু টু রিমুভাল" শিরোনাম (যেমন গিট রিভার্ট - নো-কমিট d57a39d HEAD)
  2. গিট কমিট
  3. গিট ধাক্কা

দুই ধাপের উপরে চেষ্টা করুন, এবং যদি আপনি এটি চান যা আপনি চান তাহলে গিট ধাক্কা।

যদি আপনি কিছু ভুল করেন তবে:

গিট রিভার্ট - বাবার


প্রত্যাবর্তন কমান্ড রোলব্যাক কমান্ড।

git revert <commit1> <commit2> 

নমুনা:

git revert 2h3h23233

এটা নীচের মত মাথা থেকে পরিসীমা নিতে সক্ষম। এখানে 1 বলেছেন "শেষ কমিট ফিরে।"

git revert HEAD~1..HEAD

এবং তারপর করবেন git push


যদি আপনি শেষ কমিটিতে কিছু ত্রুটি সংশোধন করতে চান তবে একটি ভাল বিকল্প git commit --amend কমান্ড ব্যবহার করবে । যদি কোনও রেফারেন্সের দ্বারা সর্বশেষ কমিটির নির্দেশ দেওয়া হয় না, তবে এটিই কৌশলটি করবে, কারণ এটি একই পিতামাতার সাথে শেষ চুক্তি হিসাবে অঙ্গীকার করে। যদি শেষ কমিটির কোন রেফারেন্স না থাকে তবে এটি কেবল বাতিল করা হবে এবং এই কমিটিটি শেষ কমিট হবে। এই commits প্রত্যাবর্তন ছাড়া commits সংশোধন করার একটি ভাল উপায়। তবে এটি নিজস্ব সীমাবদ্ধতা আছে।


আমার এবং সম্ভবত অন্যদের জন্য সেরা বিকল্পটি জিট রিসেট বিকল্প:

git reset --hard <commidId> && git clean -f

এই আমার জন্য সবচেয়ে ভাল বিকল্প হয়েছে! এটা সহজ, দ্রুত এবং কার্যকর!

দ্রষ্টব্য: মন্তব্য অনুযায়ী উল্লেখ করা হয় না যদি আপনি আপনার শাখাটি অন্য লোকেদের সাথে ভাগ করে নেবেন যারা পুরানো কাজগুলির কপি আছে

এছাড়াও মন্তব্য থেকে, যদি আপনি কম 'ballzy' পদ্ধতিটি ব্যবহার করতে চান তবে আপনি এটি ব্যবহার করতে পারেন

git clean -i


সমস্ত পরিবর্তন করার পরে, যখন আপনি এই সমস্ত কমান্ডগুলি ধাক্কা দিবেন, তখন আপনাকে ব্যবহার করতে হবে:

git push -f ...

এবং শুধুমাত্র না git push


একটি কমান্ড (কোর গিটের অংশ নয়, তবে এটি git-extras প্যাকেজগুলির মধ্যে রয়েছে) বিশেষ করে পুরানো কাজগুলি ফিরিয়ে দেওয়ার এবং স্টেজ করার জন্য:

git back

প্রতি man পৃষ্ঠা , এটি যেমন ব্যবহার করা যেতে পারে:

# Remove the latest three commits
git back 3

পছন্দসই কমিট পুনরায় সেট করার চেষ্টা করুন -

git reset <COMMIT_ID>

(COMMIT_ID ব্যবহারের জন্য চেক করুন git log)

এটি সমস্ত পরিবর্তিত ফাইলগুলিকে আন-যুক্ত অবস্থায় পুনরায় সেট করবে।

এখন আপনি checkoutসমস্ত আন-সংযুক্ত ফাইল দ্বারা পারেন

git checkout .

git logআপনার পরিবর্তন যাচাই করতে চেক করুন ।

হালনাগাদ

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

git update-ref -d HEAD


আমি বিশ্বাস করি কিছু লোক এই প্রশ্নে আসতে পারে যে তারা কীভাবে তাদের মাস্টার্সে রোলব্যাক করেছেন এমন পরিবর্তনগুলি কীভাবে পরিবর্তন করতে হয় - অর্থাত সবকিছু সরিয়ে ফেলুন এবং মূল / মাস্টারের কাছে ফিরে যান, এই ক্ষেত্রে, এটি করুন:

git reset --hard origin/master

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master


আপনি নিম্নলিখিত দুটি আদেশ দ্বারা এটি করতে পারেন:

git reset --hard [previous Commit SHA id here]
git push origin [branch Name] -f

এটা আপনার আগের গিট কমিট মুছে ফেলা হবে।

আপনি যদি আপনার পরিবর্তনগুলি রাখতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

git reset --soft [previous Commit SHA id here]

তারপর এটি আপনার পরিবর্তন সংরক্ষণ করা হবে।


পূর্ববর্তী প্রতিশ্রুতি থেকে HEAD এ পরিবর্তনগুলি রাখা এবং পূর্ববর্তী কমিটিতে যাওয়ার জন্য, তা করুন:

git reset <SHA>

যদি পূর্ববর্তী কমিটি থেকে HEAD এ পরিবর্তনগুলি প্রয়োজন হয় না এবং কেবলমাত্র সমস্ত পরিবর্তন বাতিল করা হয় তবে তা করুন:

git reset --hard <SHA>

এটি আপনি "প্রত্যাবর্তন" দ্বারা অর্থ কি অনেক উপর নির্ভর করে।

সাময়িকভাবে একটি ভিন্ন কমিটিতে স্যুইচ করুন

যদি আপনি সাময়িকভাবে এটিতে ফিরে যান, চারপাশে বোকা বজায় রাখুন, তবে আপনি যেখানেই ফিরে আসেন, আপনাকে যা করতে হবে তা সবই পছন্দসই কমিটির চেক আউট করুন:

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

অথবা যদি আপনি সেখানে থাকাকালীন কাজ করতে চান তবে এগিয়ে যান এবং এটিতে থাকা অবস্থায় একটি নতুন শাখা তৈরি করুন:

git checkout -b old-state 0d1d7fc32

যেখানে আপনি ছিল ফিরে যেতে, আপনি আবার ছিল শাখা চেক আউট। (যদি আপনি পরিবর্তনগুলি করেছেন, যেমন শাখাগুলি স্যুইচ করার সময় সর্বদা, আপনাকে যথাযথভাবে তাদের সাথে মোকাবিলা করতে হবে। আপনি তাদের ফেলে দেওয়ার জন্য পুনরায় সেট করতে পারেন; আপনি স্ট্যাশ, চেকআউট, পপ স্ট্যাশ করতে পারেন তাদের সাথে নিতে; আপনি করতে পারেন সেখানে যদি আপনি একটি শাখা চান সেখানে তাদের একটি শাখায়।)

হার্ড মুছে ফেলা অপ্রকাশিত commits

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

# 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.

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

নতুন commits সঙ্গে প্রকাশিত commits পূর্বাবস্থায় ফেরানো

অন্যদিকে, যদি আপনি কাজটি প্রকাশ করেছেন তবে আপনি সম্ভবত শাখাটি পুনরায় সেট করতে চান না, কারণ এটি কার্যকরভাবে ইতিহাস পুনর্বিবেচনা করা। যে ক্ষেত্রে, আপনি সত্যিই commits প্রত্যাবর্তন করতে পারে। গিটের সাথে, প্রত্যাবর্তনের একটি খুব নির্দিষ্ট অর্থ রয়েছে: এটি বাতিল করতে বিপরীত প্যাচ দিয়ে একটি কমিটি তৈরি করুন। এই ভাবে আপনি কোন ইতিহাস পুনর্লিখন করবেন না।

# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053 

# Reverting a merge commit
git revert -m 1 <merge_commit_sha>

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

git-revert ম্যানপ্যাজ আসলে তার বিবরণে এই অনেক কভার। আরেকটি দরকারী লিঙ্ক এই git-scm.com অধ্যায় git-revert আলোচনা

আপনি যদি সব পরে ফিরে যেতে না চান তবে আপনি প্রত্যাবর্তন (এখানে বর্ণিত হিসাবে) প্রত্যাবর্তন করতে পারেন বা ফিরতি (পূর্ববর্তী বিভাগটি দেখুন) এর আগে পুনরায় সেট করতে পারেন।

আপনি এই ক্ষেত্রে এই উত্তর সহায়ক খুঁজে পেতে পারেন:
কিভাবে একটি পূর্ববর্তী অবস্থান ফিরে শিরোনাম সরানো? (বিচ্ছিন্ন মাথা)


আপনি মাস্টার এবং সেই সম্পর্কিত শাখার বিষয়ে কথা বলছেন (অনুমান করে যে, এটি কোনও কার্যকারী শাখা হতে পারে যার সাথে আপনি উদ্বিগ্ন হন):

# Revert local master branch to November 3rd commit ID
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50

# Revert remote master branch to November 3rd commit ID
git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master

আমি ব্লগ পোস্ট থেকে উত্তর খুঁজে পেয়েছি নির্দিষ্ট কমিট রিমোট গিট repo মুছে দিন


উত্তর দেওয়ার আগে কিছুটা ব্যাকগ্রাউন্ড যুক্ত করুন, এই HEAD কী ব্যাখ্যা করছে।

First of all what is HEAD?

HEAD কেবল বর্তমান শাখায় বর্তমান কমিটির (সর্বশেষ) একটি রেফারেন্স। যে কোনও সময়ে (শুধুমাত্র git worktree ব্যতীত) একক HEAD হতে পারে।

HEAD সামগ্রীটি .git/HEAD ভিতরে সংরক্ষণ করা হয় এবং এটি বর্তমান .git/HEAD 40 বাইট SHA-1 ধারণ করে।

detached HEAD

যদি আপনি সর্বশেষ HEAD না হন - অর্থাত HEAD ইতিহাসে পূর্ববর্তী HEAD ইঙ্গিত দিচ্ছে, এটি হ'ল detached HEAD নামে পরিচিত।

কমান্ড লাইনে এটি দেখতে হবে - শাখা নামের পরিবর্তে SHA-1, যেহেতু HEAD বর্তমান শাখাটির টিপকে নির্দেশ করছে না:

একটি পৃথক HEAD থেকে কিভাবে পুনরুদ্ধারের উপর কয়েক বিকল্প:

git checkout

git 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 আবার সেট করবে।

প্রতিটি সময় HEAD সংশোধন করা হয় সেখানে reflog একটি নতুন এন্ট্রি হবে

git reflog
git checkout [email protected]{...}

এই আপনি আপনার পছন্দসই কমিটি ফিরে পাবেন

git reset HEAD --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.
  • দ্রষ্টব্য: ( গিট 2.7 থেকে ) এছাড়াও আপনি git rebase --no-autostash হিসাবেও ব্যবহার করতে পারেন।

এই স্কিমা কোন আদেশ কি নির্দেশ করে। আপনি সেখানে reset && checkout HEAD পরিবর্তন করতে পারেন দেখতে পারেন।


বলুন আপনি নিম্নলিখিতগুলি ~/commits-to-revert.txt নামে একটি পাঠ্য ফাইলে ~/commits-to-revert.txt (আমি তাদের জন্য git log --pretty=oneline ব্যবহার করেছি)

fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219
0c27ecfdab3cbb08a448659aa61764ad80533a1b
f85007f35a23a7f29fa14b3b47c8b2ef3803d542
e9ec660ba9c06317888f901e3a5ad833d4963283
6a80768d44ccc2107ce410c4e28c7147b382cd8f
9cf6c21f5adfac3732c76c1194bbe6a330fb83e3
fff2336bf8690fbfb2b4890a96549dc58bf548a5
1f7082f3f52880cb49bc37c40531fc478823b4f5
e9b317d36a9d1db88bd34831a32de327244df36a
f6ea0e7208cf22fba17952fb162a01afb26de806
137a681351037a2204f088a8d8f0db6e1f9179ca

তাদের প্রত্যেককে ফিরিয়ে আনতে একটি Bash শেল স্ক্রিপ্ট তৈরি করুন:

#!/bin/bash
cd /path/to/working/copy
for i in `cat ~/commits-to-revert.txt`
do
    git revert $i --no-commit
done

এটি ফাইল এবং ডিরেক্টরি তৈরি এবং মুছে ফেলার সাথে পূর্ববর্তী অবস্থায় সবকিছু ফিরিয়ে দেয়, আপনার শাখায় এটি প্রেরণ করে এবং আপনি ইতিহাসটি ধরে রাখেন তবে আপনি এটি একই ফাইল স্ট্রাকচারে ফিরিয়ে নিয়েছেন। কেন গিট একটি git revert --to <hash> না আছে git revert --to <hash> আমার অতিক্রম করা হয়।


আপনার commits দূরবর্তী push করা হয়, আপনি তাদের অপসারণ করতে হবে। আমি আপনার শাখা বিকাশ অনুমান করা যাক এবং এটি মূল উপর ধাক্কা করা হয়।

আপনি প্রথমে উত্স থেকে বিকাশ অপসারণ করতে হবে:

git push origin :develop (note the colon)

তারপরে আপনার যে স্ট্যাটাসটি আপনি চান তা বিকাশ করতে হবে, অনুমান করা যাক যে হ্যাস হল EFGHIJK:

git reset --hard EFGHIJK

অবশেষে, আবার বিকাশ ধাক্কা:

git push origin develop

যদি পরিস্থিতিটি জরুরি হয় , এবং আপনি কেবলমাত্র দ্রুত এবং নোংরা ভাবে প্রশ্নকারীকে যা জিজ্ঞাসা করেন তা করতে চান , তাহলে আপনার প্রকল্পটি "আমার প্রকল্প" এর অধীনে রয়েছে বলে মনে হচ্ছে:

  1. পুরো ডিরেক্টরি অনুলিপি করুন এবং এটি অন্য কিছু বলুন, যেমন "আমার প্রকল্প - অনুলিপি"

  2. না:

    git reset --hard [first-4-letters&numbers-of-commit's-SHA]
    

তারপরে আপনার সিস্টেমে দুটি সংস্করণ আছে ... আপনি পূর্ববর্তী কমিটির আগ্রহের ফাইলগুলি পরীক্ষা বা অনুলিপি বা সংশোধন করতে পারেন। আপনি "আমার প্রকল্প - অনুলিপি" এর অধীনে ফাইলগুলিকে পুরোপুরিভাবে বাতিল করতে পারেন, যদি আপনি সিদ্ধান্ত নেন যে নতুন কাজ কোথাও যাচ্ছে না ...

এই পুনরুদ্ধারকৃত কমিটিটি আবার আপনার ডিরেক্টরিটি পুনঃনামকরণ করার পরে আপনি প্রকল্পটির সাথে কোনও কাজটি ছাড়াই প্রজেক্টের সাথে চালিয়ে যেতে চান এমন সুস্পষ্ট জিনিস: পুনরুদ্ধারকৃত কমিটির (অথবা এটি একটি অস্থায়ী নাম দিন) প্রকল্পটি মুছুন এবং আপনার " আমার প্রকল্প - আমার প্রকল্প "কপি ডিরেক্টরি" অনুলিপি করুন। তারপর সম্ভবত একটি মোটামুটি শীঘ্রই কমিট করবেন না।

গিট একটি উজ্জ্বল সৃষ্টি কিন্তু আপনি কেবল "এটি উড়ে উড়ে উঠতে পারবেন না": এমনকি যারা এটি ব্যাখ্যা করার চেষ্টা করেও অনেকগুলি প্রায়শই প্রায়শই অন্যান্য VCS [সংস্করণ নিয়ন্ত্রণ ব্যবস্থা] এর পূর্বের জ্ঞান অনুমান করে এবং খুব শীঘ্রই খুব গভীরে চলে যায়, এবং অন্যান্য অপরাধ সংঘটিত, যেমন "চেক আউট" করার জন্য বিনিময়যোগ্য শব্দগুলি ব্যবহার করা - এমন ভাবে যা প্রায়শই একটি শিক্ষানবিসকে বিভ্রান্ত করতে গণনা করে।

নিজেকে অনেক চাপ বাঁচানোর জন্য আপনাকে অবশ্যই গিটের একটি বই পড়তে হবে - আমি "গিট সহ সংস্করণ নিয়ন্ত্রণ" সুপারিশ করব । এবং যদি আপনি আমাকে "(করতে চান") বলে আমাকে বিশ্বাস করতে পারেন (অথবা বরং আমার scars), এটি অনুসরণ করে যে আপনি এটি এখন ভাল করতে পারেন । গিট এর বেশিরভাগ জটিলতা শাখা থেকে আসে এবং তারপর পুনর্জন্ম থেকে আসে। কিন্তু আপনার প্রশ্ন থেকে মানুষকে বিজ্ঞানের সাথে অন্ধ করে তুলতে কোন কারণ নেই

বিশেষ করে যদি, উদাহরণস্বরূপ, এটি একটি দুর্দান্ত পরিস্থিতি এবং আপনি গিট সঙ্গে একটি নবাগত হন!

PS: আরেকটি চিন্তা: এটি (এখন) কার্যক্ষেত্রগুলির সাথে একের পর এক ডিরেক্টরিতে গিট রেপোজিটরি ("রেপো") রাখতে বেশ সহজ। এর মানে উপরের দ্রুত এবং নোংরা সমাধান ব্যবহার করে আপনাকে সমগ্র গিট রিপোজিটরি অনুলিপি করতে হবে না। here --separate-git-dir ব্যবহার করে ফ্রায়ার দ্বারা উত্তরটি দেখুন । সতর্ক থাকুন , যদিও: আপনার যদি "আলাদা-ডিরেক্টরি" সংগ্রহস্থান থাকে যা আপনি অনুলিপি করেন না এবং আপনি একটি হার্ড রিসেট করেন তবে রিসেট কমিটির পরবর্তী সংস্করণগুলি চিরতরে হারিয়ে যাবে, যতক্ষণ না আপনি সম্পূর্ণরূপে যেমনটি করতে চান, নিয়মিত মেঘের (যেমন Google ড্রাইভ ) অন্যান্য স্থানগুলির মধ্যে আপনার সংগ্রহস্থলের ব্যাক আপ করুন ।


আপনি যদি "অসম্মতি" করতে চান, সর্বশেষ প্রতিশ্রুতি বার্তাটি মুছে ফেলুন এবং সংশোধিত ফাইলগুলিকে স্টেজিংয়ে ফিরিয়ে দিন, আপনি কমান্ডটি ব্যবহার করবেন:

git reset --soft HEAD~1
  • --soft নির্দেশ করে যে --soft ফাইলগুলিকে অবশ্যই --soft বিপরীত ফাইল হিসাবে রাখা উচিত যা তাদের বাতিল করে দেবে।
  • HEAD~1 শেষ কমিট। আপনি যদি রোলব্যাক 3 করতে চান তবে আপনি HEAD~3 ব্যবহার করতে পারেন। আপনি যদি নির্দিষ্ট সংশোধন নম্বরটিতে রোলব্যাক করতে চান তবে আপনি এটির SHA হ্যাশ ব্যবহার করেও এটি করতে পারেন।

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

উত্স: http://nakkaya.com/2009/09/24/git-delete-last-commit/


এটি একটি সাম্প্রতিক কমিটিতে সরাসরি রিসেট করার আরও একটি উপায়

git stash
git stash clear

শেষ কমিট থেকে আপনি যে সমস্ত পরিবর্তন করেছেন সেটি সরাসরি এটি সাফ করে।

PS: এটি একটি সামান্য সমস্যা আছে; এটা আপনি সম্প্রতি সংরক্ষিত স্ট্যাশ পরিবর্তন সব মুছে ফেলা। যা আমি বেশিরভাগ ক্ষেত্রে অনুমান করা উচিত নয়।


এখানে জটিল এবং বিপজ্জনক উত্তর প্রচুর, কিন্তু এটি আসলে সহজ:

git revert --no-commit 0766c053..HEAD
git commit

এটি হ'ল মাথা থেকে ফেরত ফিরিয়ে সবকিছুর দিকে ফিরিয়ে আনবে, যার অর্থ এটি কার্যকারী বৃক্ষের সেই অঙ্গটিকে পুনরুজ্জীবিত করবে, যেমনটি যদি প্রত্যেকটি কমিটি পিছনে চলে গিয়েছিল। তারপরে আপনি বর্তমান গাছটি করতে পারেন, এবং এটি আপনাকে "প্রত্যাবর্তিত" কমিটির সমতুল্য সমতুল্য একটি ব্র্যান্ড নতুন কমিটি তৈরি করবে।

(দ্য --no-commit পতাকাটি গিটকে একবারে সমস্ত কাজ ফিরিয়ে দেয় --no-commit অন্যথায় আপনাকে সীমাবদ্ধতার প্রতিটি প্রতিবেদনের জন্য একটি বার্তাটির জন্য অনুরোধ করা হবে, অপ্রয়োজনীয় নতুন কৃতিত্বের সাথে আপনার ইতিহাসকে টিউটরিং করা হবে।)

এটি পূর্ববর্তী অবস্থায় রোলব্যাকের একটি নিরাপদ এবং সহজ উপায় । কোন ইতিহাস ধ্বংস করা হয় না, তাই এটি ব্যবহার করা যেতে পারে যা ইতিমধ্যেই জনসাধারণের কাছে প্রকাশ করা হয়েছে।







git-revert