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


1912

আমার একটি প্রকল্প আছে যা আমি দৌড়েছিলাম git init। বেশ কয়েকটি প্রতিশ্রুতি দেওয়ার পরে, আমি git statusযা করেছি যা আমাকে জানিয়েছে যে সবকিছু আপ টু ডেট এবং স্থানীয় কোনও পরিবর্তন হয়নি।

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

git reset --hard HEAD

উত্তর:


3387

আপনি যদি নিজের কাজের অনুলিপিতে করা পরিবর্তনগুলি ফিরিয়ে দিতে চান তবে এটি করুন:

git checkout .

আপনি যদি সূচকে করা পরিবর্তনগুলি (যেমন, আপনি যুক্ত করেছেন) ফিরিয়ে দিতে চান তবে এটি করুন। সতর্কতা এটি আপনার চাপানো সমস্ত কমিটকে মাস্টারে পুনরায় সেট করবে! :

git reset

আপনি যদি প্রতিশ্রুতিবদ্ধ কোনও পরিবর্তন ফিরিয়ে নিতে চান তবে এটি করুন:

git revert <commit 1> <commit 2>

আপনি যদি ট্রেডবিহীন ফাইলগুলি মুছতে চান (যেমন, নতুন ফাইল, উত্পন্ন ফাইল):

git clean -f

অথবা আন-ট্র্যাক করা ডিরেক্টরি (যেমন, নতুন বা স্বয়ংক্রিয়ভাবে উত্পন্ন ডিরেক্টরি):

git clean -fd

133
এত দীর্ঘ সময় পরে fww, git checkout path/to/fileশুধুমাত্র স্থানীয় পরিবর্তনগুলিতে ফিরে আসবেpath/to/file
মতিজ

29
নীচের উত্তরের উত্তরগুলিতে +1 এছাড়াও গিট পরিষ্কার -f (চিহ্নবিহীন পরিবর্তনগুলি মুছে ফেলার জন্য) এবং -fd উল্লেখ করেছে (চিহ্নবিহীন ডিরেক্টরিগুলি অপসারণ করতেও)
ptdev

3
এবং যদি আপনি আপনার untracked ফাইল পরিষ্কার করতে চান, এই পড়া stackoverflow.com/questions/61212/...
Surasin Tancharoen

9
git checkout .এবং git reset [--hard HEAD]কাজ করে না, git clean -fdআমার পরিবর্তনগুলি ফিরিয়ে আনার জন্য আমাকে একটি কাজ করতে হয়েছিল।
BrainSlugs83

7
git resetআপনার পরিবর্তনগুলি পুনরায় সেট করে না, git reset --hardতা করে।
সেরিন

388

দ্রষ্টব্য: আপনিও চালাতে চাইতে পারেন

git clean -fd

যেমন

git reset --hard

হবে না untracked ফাইল, যেখানে যেমন Git-পরিচ্ছন্ন ট্র্যাক করা রুট ডিরেক্টরিটি যে Git ট্র্যাকিং অধীন নয় থেকে কোন ফাইল মুছে ফেলা হবে মুছে ফেলুন। সতর্কতা - এর সাথে যত্নবান হন! প্রথমে গিট-ক্লিন দিয়ে একটি ড্রাই-রান চালানো সহায়ক, এটি কী মুছে ফেলবে তা দেখার জন্য is

আপনি ত্রুটি বার্তা পেলে এটি বিশেষত কার্যকর

~"performing this command will cause an un-tracked file to be overwritten"

যা বেশ কয়েকটি কাজ করার সময় ঘটতে পারে, আপনি এবং আপনার বন্ধু দুজন একই নামের একটি নতুন ফাইল যুক্ত করার পরে একটি ওয়ার্কিং অনুলিপি আপডেট করা হচ্ছে, তবে তিনি প্রথমে উত্স নিয়ন্ত্রণে এটি প্রতিশ্রুতিবদ্ধ এবং আপনি আপনার চিহ্নবিহীন অনুলিপি মোছার বিষয়ে চিন্তা করেন না you ।

এই পরিস্থিতিতে, একটি শুকনো রান করা আপনাকে ওভাররাইট করা হবে এমন ফাইলগুলির একটি তালিকা প্রদর্শন করতে সহায়তা করবে।


13
ফাইল ক্লিন কমান্ডটি "গিট ক্লিন-এফ"। অবরুদ্ধ ডিরেক্টরিগুলি "গিট ক্লিন-ডি" দিয়ে মুছে ফেলা হয়
জোনাথন মিচেল

35
গিট ক্লিন-এফডি (বল -D-এর জন্য প্রয়োজনীয়)
ইলেক্টব্লেক

14
-n বা --dry- রান শুকনো রান জন্য পতাকা।
স্টেফেনবিজ

2
গিট ক্লিন-এফডি যদি আপনার গিটের ভাণ্ডারে অন্য গিট সংগ্রহস্থল থাকে। ডাবল চ ছাড়া এটি অপসারণ করা হবে না।
ট্রিসমেজিস্টোস

147

রি-ক্লোন

GIT=$(git rev-parse --show-toplevel)
cd $GIT/..
rm -rf $GIT
git clone ...
  • Local স্থানীয়, বিহীন কমিট মুছে ফেলে
  • You আপনার করা পরিবর্তনগুলি ট্র্যাক করা ফাইলগুলিতে ফিরিয়ে দেয়
  • Deleted আপনি মুছে ফেলা ট্র্যাক ফাইল পুনরুদ্ধার
  • Files তালিকাভুক্ত ফাইল / ডায়ারগুলি মুছে দেয় .gitignore(বিল্ড ফাইলগুলির মতো)
  • Files ফাইল / ডায়ারগুলি মুছে দেয় যা ট্র্যাক করা হয়নি এবং এতে নেই in .gitignore
  • This আপনি এই পদ্ধতিরটি ভুলবেন না
  • Tes বর্জ্য ব্যান্ডউইথ

নীচে আমি প্রতিদিন ভুলে যাব এমন অন্যান্য আদেশ রয়েছে।

পরিষ্কার এবং পুনরায় সেট করুন

git clean --force -d -x
git reset --hard
  • Local স্থানীয়, বিহীন কমিট মুছে ফেলে
  • You আপনার করা পরিবর্তনগুলি ট্র্যাক করা ফাইলগুলিতে ফিরিয়ে দেয়
  • Deleted আপনি মুছে ফেলা ট্র্যাক ফাইল পুনরুদ্ধার
  • Files তালিকাভুক্ত ফাইল / ডায়ারগুলি মুছে দেয় .gitignore(বিল্ড ফাইলগুলির মতো)
  • Files ফাইল / ডায়ারগুলি মুছে দেয় যা ট্র্যাক করা হয়নি এবং এতে নেই in .gitignore

পরিষ্কার

git clean --force -d -x
  • Local স্থানীয়, বিহীন কমিট মুছে ফেলে
  • You আপনার করা পরিবর্তনগুলি ট্র্যাক করা ফাইলগুলিতে ফিরিয়ে দেয়
  • Deleted আপনি মুছে ফেলা ট্র্যাক ফাইল পুনরুদ্ধার
  • Files তালিকাভুক্ত ফাইল / ডায়ারগুলি মুছে দেয় .gitignore(বিল্ড ফাইলগুলির মতো)
  • Files ফাইল / ডায়ারগুলি মুছে দেয় যা ট্র্যাক করা হয়নি এবং এতে নেই in .gitignore

রিসেট

git reset --hard
  • Local স্থানীয়, বিহীন কমিট মুছে ফেলে
  • You আপনার করা পরিবর্তনগুলি ট্র্যাক করা ফাইলগুলিতে ফিরিয়ে দেয়
  • Deleted আপনি মুছে ফেলা ট্র্যাক ফাইল পুনরুদ্ধার
  • Files তালিকাভুক্ত ফাইল / ডায়ারগুলি মুছে দেয় .gitignore(বিল্ড ফাইলগুলির মতো)
  • Files ফাইল / ডায়ারগুলি মুছে দেয় যা ট্র্যাক করা হয়নি এবং এতে নেই in .gitignore

মন্তব্য

উপরের সমস্তটি নিশ্চিত করার জন্য পরীক্ষার কেস (ব্যাশ বা শ ব্যবহার করুন):

mkdir project
cd project
git init
echo '*.built' > .gitignore
echo 'CODE' > a.sourceCode
mkdir b
echo 'CODE' > b/b.sourceCode
cp -r b c
git add .
git commit -m 'Initial checkin'
echo 'NEW FEATURE' >> a.sourceCode
cp a.sourceCode a.built
rm -rf c
echo 'CODE' > 'd.sourceCode'

আরো দেখুন

  • git revert পূর্বেকার কমিটগুলি পূর্বাবস্থায় ফেরান এমন নতুন কমিট করা
  • git checkout পূর্বের কমিটগুলিতে সময়ে ফিরে যেতে (প্রথমে কম্যান্ডের উপরের চালনার প্রয়োজন হতে পারে)
  • git stashgit resetউপরের মত একই , তবে আপনি এটিকে পূর্বাবস্থায় ফেরাতে পারেন

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

1
আমি বেশ নিশ্চিত, যে প্রথম বিকল্পটি ( পুনরায় ক্লোন ) আসলে "স্থানীয়, অ-
চাপিত কমিটগুলি

1
@ স্টাইফ্লে something এমন কিছু যা কিছু করে, ❌ এমন কিছু যা না করে
উইলিয়াম এন্টারিকেন

3
@ ফুলডিসেন্ট এটি পড়ার জন্য একধরণের বিভ্রান্তিকর। "Local স্থানীয়, চাপবিহীন কমিটগুলি মুছবে না"। এর অর্থ এটি মুছবে না। ডাবল নেগেটিভ মানে কি এটি মুছবে?
স্টাইফেল

1
সম্পর্কে -x পতাকা এতে git clean -f -d -x: -x বিকল্পটি নির্দিষ্ট করা থাকলে, উপেক্ষা করা ফাইলগুলিও সরানো হবে। উদাহরণস্বরূপ, এটি সমস্ত বিল্ড পণ্য মুছে ফেলার জন্য কার্যকর হতে পারে
অ্যালেক্স

82

আপনি যদি সমস্ত পরিবর্তনগুলি প্রত্যাহার করতে চান এবং বর্তমান রিমোট মাস্টারের সাথে আপ টু ডেট থাকতে চান (উদাহরণস্বরূপ আপনি দেখতে পাচ্ছেন যে মাস্টার হেড এগিয়ে চলেছে যেহেতু আপনি এটি ব্রাঞ্চ বন্ধ করে দিয়েছেন এবং আপনার ধাক্কা 'প্রত্যাখ্যান' হচ্ছে) আপনি ব্যবহার করতে পারেন

git fetch  # will fetch the latest changes on the remote
git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.

এটা উল্লেখ করার জন্য গুরুত্বপূর্ণ বলে মনে হয় origingit reset --hard origin/master(যা কাজ করে) - ছাড়াই এটি (অর্থাত git reset --hard) কিছুই পরিবর্তিত বলে মনে হয়।
জেক

আমার কিছু স্থানীয় পরিবর্তন হয়েছিল এবং আমি কোনও আদেশ দিয়ে গেট রিসেট করতে পারি না
মুদ্রার

50

গিট-রিফ্লোগে দেখুন এটি মনে রাখে এমন সমস্ত রাজ্যের তালিকা তৈরি করবে (ডিফল্ট 30 দিনের দিন), এবং আপনি যা চান তা কেবল চেকআউট করতে পারেন। উদাহরণ স্বরূপ:

$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d

উইলিয়ামকে ধন্যবাদ আমি আমার গাছটিকে পুরানো সংস্করণে পুনরায় সেট করেছি এবং কীভাবে সাম্প্রতিককালে পুনরুদ্ধার করব তা নিশ্চিত নই। তোমার গিট রিফ্লোগ আমাকে বাঁচিয়েছে। আবারও একবার ধন্যবাদ.
পালানিরাজা

1
আমাকেও বাঁচিয়েছে! আমার ক্ষেত্রে আমার অ্যাডভেঞ্চারটি git rebase -iভুল হয়ে গিয়েছিল (সম্পাদনার ভুলের কারণে কিছু প্রতিশ্রুতি মুছে ফেলা শেষ হয়েছিল)। এই টিপকে ধন্যবাদ আমি আবার ভাল অবস্থায় ফিরে এসেছি!
পনির_টিক্কা

30 দিনের ডিফল্ট বলতে কী বোঝ?
Mohe TheDreamy

@ মোহেTheড্রিমি আমার মানে একটি সময়সীমা আছে। অবশেষে আবর্জনা সংগ্রহকারী যখন তাদের বয়স সেই সীমা ছাড়িয়ে যাবে তখন অ্যাক্সেসযোগ্য উল্লেখগুলি মুছে ফেলবে। ডিফল্ট 30 দিন ব্যবহৃত হত (এবং এখনও হতে পারে)। সুতরাং পুরানো রেফারেন্সগুলি উপলভ্য নাও হতে পারে।
উইলিয়াম পার্সেল

36

ডেঞ্জার আহেদ: (দয়া করে মন্তব্যগুলি পড়ুন my আমার উত্তরে প্রস্তাবিত আদেশটি কার্যকর করা আপনার পছন্দের চেয়ে বেশি মোছতে পারে)

ডিরেক্টরিগুলি সহ সমস্ত ফাইল মুছে ফেলার জন্য আমাকে চালাতে হয়েছিল

git clean -f -d

13
আমি যে ব্যথাটি করেছি কেবল সেটিকেই বাঁচাতে: এটি .gitignore-d ফাইলগুলিও মুছে ফেলবে!
ল্যান্ডোনস

দুঃখিত যদি আমি আপনাকে কোন সমস্যা সৃষ্টি করি তারপরে আমি কেবল সেই ফোল্ডারে থাকা সমস্ত কিছুই ফিরিয়ে আনতে এবং মুছে ফেলার চেষ্টা করেছি। আমি সঠিক পরিস্থিতিটি মনে করতে পারি না, তবে "-d" ছিল আমার পক্ষে কাজ করা। আমি আশা করি আমি আপনাকে খুব বেশি ব্যথা করিনি :-)
টোবিয়াস গাসম্যান

1
কোন ক্ষতি করা হয়নি। আমার ব্যাকআপ ছিল, তবে এটি সম্ভবত দাবি অস্বীকার করার আদেশ দেয়;)
লন্ডন

35

একগুচ্ছ উত্তর পড়ে এবং সেগুলি চেষ্টা করার পরে, আমি বিভিন্ন প্রান্তের কেস পেয়েছি যার অর্থ কখনও কখনও তারা কার্যকরী অনুলিপিটি পুরোপুরি পরিষ্কার করে না।

এটি করার জন্য আমার বর্তমান বাশ স্ক্রিপ্ট এখানে রয়েছে, যা সর্বদা কাজ করে।

#!/bin/sh
git reset --hard
git clean -f -d
git checkout -- HEAD

ওয়ার্কিং কপি রুট ডিরেক্টরি থেকে চালান।


10
শেষ আদেশটি আমাকে দেয়error: pathspec 'HEAD' did not match any file(s) known to git.
0xC0000022L

1
আমি যখন "-" বের করেছিলাম তখন এটি আমার পক্ষে কাজ করেছিল। git checkout HEAD
জেসেটার

4
git reset --hardট্র্যাক করা ফাইলগুলিকে git clean -f -dরিভার্ট করে (মঞ্চস্থ হয় বা না), অনিবদ্ধ ফাইলগুলি সরিয়ে দেয়, আমাদের তখন git checkout -- HEADকেন এটি দরকার?
v.shashenko

আমাদের ডাবল হাইফেন দরকার নেই। একটি টাইপো হতে হবে।
ফ্যারাক্স

35

খালি এক্সিকিউট -

git stash

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

git stash apply 

3
ব্যবহার আপনার জন্য git stash popস্বয়ংক্রিয়ভাবে শীর্ষস্থানীয় স্ট্যাশড পরিবর্তনটি সরিয়ে ফেলবে
অ্যারো সেন

8
git stash dropকাজের অনুলিপি প্রয়োগ না করে সর্বশেষ স্ট্যাশড স্টেটটি সরাতে।
ডেরচাও

গিট স্ট্যাশ প্রয়োগ নতুন তৈরি হওয়া ফাইল যুক্ত করবে না
রবিস্ট্ম

27

আমি একটি একই সমস্যা পূরণ। সমাধানটি হ'ল git logস্থানীয় কমিটের কোন সংস্করণ দূরবর্তী থেকে পৃথক। (যেমন সংস্করণটি হ'ল 3c74a11530697214cbcc4b7b98bf7a65952a34ec)।

তারপরে git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ecপরিবর্তনটি ফিরিয়ে আনতে ব্যবহার করুন ।


16

আমি একটি অনুরূপ ইস্যু অনুসন্ধান করেছি,

স্থানীয় কমিটগুলি ফেলে দিতে চেয়েছিল:

  1. সংগ্রহস্থল ক্লোন করা (গিট ক্লোন)
  2. দেব শাখায় স্যুইচ করা হয়েছে (গিট চেকআউট দেব)
  3. কিছু কমিট করেছে (গিট কমিট-এম "কমিট 1")
  4. কিন্তু এই স্থানীয় প্রতিশ্রুতিগুলি প্রত্যন্ত অঞ্চলে ফিরে যাওয়ার সিদ্ধান্ত নিয়েছে (উত্স / দেব)

নীচে তাই করেছেন:

git reset --hard origin/dev

পরীক্ষা করে দেখুন:

git status  

        On branch dev  
        Your branch is up-to-date with 'origin/dev'.  
        nothing to commit, working tree clean  

এখন স্থানীয় কমিটগুলি হারিয়ে গেছে, উপরের প্রথম পয়েন্টের প্রাথমিক ক্লোনড অবস্থায়।


1
ধন্যবাদ, এটাই আমার পক্ষে কাজ করেছে - "গিট রিসেট --হর্দিত উত্স"
নিসিম নাইম

এটা সাহায্য করে জেনে খুশি।
মনোহর রেড্ডি পোরেড্ডি

7

আপনি সম্ভবত আপনার ওয়ার্কিং ডিরেক্টরিতে আপনার কাজ / ফাইলগুলি স্ট্যাশ করতে চান না / প্রয়োজন বোধহয় কেবল সেগুলি থেকে পুরোপুরি পরিত্রাণ পান। কমান্ডটি git cleanআপনার জন্য এটি করবে।

এটি করার জন্য কিছু সাধারণ ব্যবহারের ক্ষেত্রে হ'ল মার্ফট বা বাহ্যিক সরঞ্জামগুলি দ্বারা উত্পাদিত ক্রাফট সরানো বা অন্য ফাইলগুলি সরিয়ে ফেলা যাতে আপনি একটি পরিষ্কার বিল্ড চালাতে পারেন।

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

git stash --all

যা সমস্ত কিছু সরিয়ে ফেলবে তবে সমস্ত কিছু স্ট্যাশ করে সংরক্ষণ করবে। এই স্ট্যাশ পরে ব্যবহার করা যেতে পারে।

তবে, আপনি যদি সত্যই সমস্ত ফাইল মুছে ফেলতে চান এবং আপনার ওয়ার্কিং ডিরেক্টরিটি পরিষ্কার করতে চান তবে আপনার কার্যকর করা উচিত

git clean -f -d

কমান্ডের ফলে এটি কোনও ফাইল এবং এমন কোনও উপ ডিরেক্টরিকে সরিয়ে ফেলবে যা কোনও আইটেম নেই। git clean -f -dকমান্ডটি কার্যকর করার আগে একটি স্মার্ট কাজটি চালানো হয়

git clean -f -d -n

যা আপনাকে কার্যকর করার পরে কী সরানো হবে তার পূর্বরূপ দেখায় git clean -f -d

সুতরাং এখানে আপনার বিকল্পগুলির সংক্ষিপ্ত বিবরণটি সবচেয়ে আক্রমণাত্মক থেকে কমপক্ষে আক্রমণাত্মক


বিকল্প 1 : স্থানীয়ভাবে সমস্ত ফাইল সরান (সর্বাধিক আক্রমণাত্মক)

git clean -f -d

বিকল্প 2 : উপরের প্রভাবটির পূর্বরূপ দেখুন (সবচেয়ে আক্রমণাত্মক প্রাকদর্শন করুন)

git clean -f -d -n

বিকল্প 3 : সমস্ত ফাইল স্ট্যাশ করুন (অন্তত আগ্রাসী)

`git stash --all` 

6

স্থানীয় শাখায় অসম্মতিযুক্ত সমস্ত পরিবর্তন ফিরিয়ে আনার জন্য এটি ব্যবহার করে দেখুন

$ git reset --hard HEAD

তবে আপনি যদি এর মতো কোনও ত্রুটি দেখতে পান:

fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.

আপনি '.git' ফোল্ডারে নেভিগেট করতে পারেন তারপর সূচি.লক ফাইলটি মুছুন:

$ cd /directory/for/your/project/.git/
$ rm index.lock

ফাইনালি, আবার কমান্ডটি চালান:

$ git reset --hard HEAD

0

এই প্রশ্নটি বিস্তৃত ভাণ্ডার পুনরায় সেট / রিভার্ট করা সম্পর্কে আরও বেশি, তবে আপনি যদি স্বতন্ত্র পরিবর্তনকে ফিরিয়ে আনতে আগ্রহী হন - আমি এখানে অনুরূপ উত্তর যুক্ত করেছি:

https://stackoverflow.com/a/60890371/2338477

প্রশ্নের উত্তর:

  • গিট ইতিহাসে সংরক্ষণ পরিবর্তন ছাড়াই বা পৃথক পরিবর্তন কীভাবে ফিরিয়ে আনতে হয়

  • একই অবস্থা থেকে পুনরায় চালু করতে কীভাবে পুরানো সংস্করণে ফিরে যেতে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.