গিট: নতুন ফাইলগুলি সহ সমস্ত কার্যকারী ডিয়ার পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনুন


1151

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

এটি করার জন্য কারও কি ধারণা আছে?


1
@ জোয়েল এবং ওয়েফায়ার: আপনি কেন চেষ্টা করবেন না git help resetএবংgit help clean
শেরনান্দেজ

3
আপনার গিট কনফিগারেশনে এর জন্য একটি
উপাত্ত তৈরি করা

উত্তর:


1698
git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

আসলে কী মুছে ফেলা হবে তা দেখার জন্য -nপতাকাটি ব্যবহার করুন (এটি মূলত একটি পরীক্ষা চালানো)। আপনি যখন আসলে মুছতে প্রস্তুত হন, তারপরে -nপতাকাটি সরান :

git clean -nfd


16
দ্রষ্টব্য: গিট রিসেট --হার্ড স্টেজেড পরিবর্তনগুলি পাশাপাশি কার্যকারী ডিরেক্টরি পরিবর্তনগুলি সরিয়ে দেয়। এছাড়াও, গিট ক্লিন-ফ-ডি সম্ভবত একটি নতুন চিহ্নবিহীন ফাইল যুক্ত করার চেয়ে ভাল বিপরীত। প্রশ্ন থেকে, প্রশ্নকর্তা তার বর্তমান উপেক্ষা করা ফাইলের সেটটি নিয়ে বেশ খুশি হতে পারেন।
সিবি বেইলি

7
পরবর্তী উত্তরটি পড়ুন এবং -x সুইচটি দেখুন। (এটি আপনার স্থানীয় কনফিগারেশন যেমন পাসওয়ার্ড / ডিবি-সেটিংস ফাইলগুলিও মুছে ফেলতে পারে eg যেমন ডাটাবেস.আইএমএল)
বরিস

9
এই ক্ষেত্রে -x সুইচ অপ্রয়োজনীয় এবং কিছুটা বিপজ্জনক।
টিম গৌটিয়ার

66
git clean -fxdআপনি কী করছেন তা যদি আপনি না জানেন তবে প্রকৃতপক্ষে সত্যই বিপজ্জনক হতে পারে। আপনি আপনার ডাটাবেস ইত্যাদির মতো কিছু অতি গুরুত্বপূর্ণ ফাইলবিহীন ফাইলগুলি স্থায়ীভাবে মুছতে পারেন। সাবধানতা অবলম্বন করুন।
ম্যাসন স্টুয়ার্ট

10
দ্রষ্টব্য যে git clean -f -dউপেক্ষা করা ফোল্ডারগুলি থেকেও ফাইল মুছবে। সুতরাং আপনার সমস্ত স্থানীয় লগ এবং এর মতো জিনিসগুলি চলে যাবে। সাধারণত এটি কোনও বড় সমস্যা নয় তবে এটি জানা ভাল better
সাইরিয়েল

299

নিরাপদ পদ্ধতি, যা আমি প্রায়শই ব্যবহার করি:

git clean -fd

/docs/git-cleanপৃষ্ঠা অনুসারে সিনট্যাক্স ব্যাখ্যা :

  • -f(ওরফে --force:)। যদি গিট কনফিগারেশন ভেরিয়েবল clean.requireForce মিথ্যাতে সেট না করা থাকে, -ফ, -n বা -i না দিয়ে গিট ক্লিন ফাইল বা ডিরেক্টরি মুছতে অস্বীকার করবে। গিটটি .git সাব ডিরেক্টরি বা ফাইলের সাথে ডিরেক্টরিগুলি মুছতে অস্বীকার করবে যতক্ষণ না দ্বিতীয় -f দেওয়া হয়।
  • -d। চিহ্নবিহীন ফাইলগুলি ছাড়াও তালিকাভুক্ত ডিরেক্টরিগুলি সরান। যদি কোনও চিহ্নবিহীন ডিরেক্টরি অন্য কোনও গিট সংগ্রহস্থল দ্বারা পরিচালিত হয়, তবে এটি ডিফল্টরূপে সরানো হয় না। আপনি যদি সত্যিই এই জাতীয় ডিরেক্টরি মুছতে চান তবে দুবার -f বিকল্পটি ব্যবহার করুন।

মন্তব্যগুলিতে উল্লিখিত হিসাবে, এটি git clean -ndএকটি শুকনো রান করে এমনটি করা ভাল and এবং এটি মুছে ফেলার আগে আপনাকে কী মুছে ফেলা হবে তা বলবে।

git cleanডক পৃষ্ঠার লিঙ্ক : https://git-scm.com/docs/git-clean


124
আমি সর্বদা git clean -nd .প্রকৃতপক্ষে ফাইলগুলি মুছে ফেলার আগেgit clean -fd .
টিয়ার করুন

14
কেন? আপনি বিস্তারিত ব্যাখ্যা করতে পারেন দয়া করে।
গ্রেগ বি

31
প্রতি গিট ক্লিন- এন বিকল্পটি আসলে একটি শুকনো রান যা কোনও কিছুই সরিয়ে দেয় না, এটি আপনাকে দেখায় যে কী করা হবে।
RNickMcCandless

2
@ বিয়ার, আপনি আগে সর্বদা একটি ফাঁকা add -A+ commit -a+ করতে পারেন । প্রতিটি মুছে ফেলা পর্যালোচনা সহজভাবে বড় পরিস্থিতিতে জন্য স্কেল না। এছাড়াও, শুকনো দৌড়ানো কোনও রূপোর বুলেট নয়: আপনি যদি পর্যালোচনা চলাকালীন কোনও কিছু মিস করেন বা ভুল করে থাকেন তবে কী হবে? revert headgit clean
পেসারিয়ার

1
এটি ফাইলগুলি সরিয়ে দেয়, তবে এটি পরিবর্তনগুলি পূর্বাবস্থায় ফেরায় না।
ডানকুইক্সোট

201

সব জন্য unstaged ফাইল ব্যবহার করুন:

git checkout -- .

.শেষে গুরুত্বপূর্ণ।

.আপনার প্রকল্পের একটি নির্দিষ্ট সাব-ডিরেক্টরি সাফ করার জন্য আপনি একটি উপ ডিরেক্টরি ডিরেক্টরি দিয়ে প্রতিস্থাপন করতে পারেন । সমস্যাটি এখানে বিশেষভাবে সম্বোধন করা হয়েছে


7
@ ভিনসেন্ট: দ্য - চেকআউট কমান্ডটি জানিয়ে যে ত্রুটিগুলি টাইপ করা এড়িয়ে চলে যে কোনও পরামিতি নির্দিষ্ট করা হয়নি। এগুলি ছাড়া আপনি বর্তমানের পুনরায় সেট করার পরিবর্তে একটি নতুন শাখা দিয়ে শেষ করতে পারেন!
ইগর রডরিগেজ

2
এটি সবচেয়ে নিরাপদ রুট, তবে এটি অচিহ্নযুক্ত ফাইলগুলি (সদ্য সংযুক্ত ফাইলগুলি) সরিয়ে ফেলবে না।
টিঙ্কারটেনারসফটওয়্যার গুয়

5
এটি মুছে ফেলা, তবুও অনির্কিত ফাইলগুলি পুনরুদ্ধার করে না।
সেরিন

শুধু এফওয়াইআই। আমি এটা মিস করেছি নিশ্চিত করুন যে আপনি যে ডিরেক্টরিতে রয়েছেন আপনি অনাস্থাবিহীন পরিবর্তনগুলি মুছতে চান। উদাহরণস্বরূপ, আমার একটি শাখার বিভিন্ন লোকেশনে 2 টি পৃথক ফাইলে পরিবর্তন হয়েছে, যেমন: src/app/work/filename.jsএবং ../app/working/test/filename.js। কেবল git checkout -- .শাখায় ব্যবহার করে কেবল প্রথম ফাইলটি মুছে ফেলা হয়েছে ( অগ্রণী .. / ছাড়াই )। সুতরাং আমি cd ../দ্বিতীয় অবস্থান ডিরেক্টরিতে প্রবেশ করতে হবে যাতে দ্বিতীয় কমান্ড ব্যবহার করে ফাইল মুছতে।
ক্রিস 22

57

কটাক্ষপাত আছে git cleanকমান্ড।

গিট-ক্লিন - কার্যকারী গাছ থেকে তালা ছাড়ানো ফাইলগুলি সরান

বর্তমান ডিরেক্টরি থেকে শুরু করে সংস্করণ নিয়ন্ত্রণে নেই এমন ফাইলগুলি পুনরাবৃত্তভাবে অপসারণ করে কার্যকরী গাছটি সাফ করে।

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


আমি git clean -iমেনু থেকে "পরিষ্কার" চেষ্টা করেছি এবং বেছে নিয়েছি - এটি শেষ পর্যন্ত নতুন ফাইলগুলি সরিয়ে দিয়েছে।
সানি

42

নিম্নলিখিত কাজগুলি:

git add -A .
git stash
git stash drop stash@{0}

দয়া করে নোট করুন যে এটি আপনার অচিহ্নবদ্ধ এবং মঞ্চস্থ স্থানীয় পরিবর্তনগুলি উভয়ই বাতিল করবে। সুতরাং আপনি এই আদেশগুলি চালানোর আগে আপনার যা কিছু রাখতে চান তা করা উচিত।

একটি সাধারণ ব্যবহারের কেস: আপনি চারপাশে প্রচুর ফাইল বা ডিরেক্টরি সরিয়ে নিয়েছেন এবং তারপরে মূল অবস্থায় ফিরে যেতে চান।

ক্রেডিট: https://stackoverflow.com/a/52719/246724


1
আপনি ন্যায্যতার পরিবর্তে স্ট্যাশ @ {0 git stash drop? রেফারেন্স করছেন কেন ?
মাইকেল

সত্যি, আমি মনে করি না :)
donquixote

এই এক কাজ। একটি নোট হিসাবে, আপনি হোম ডিরেক্টরিতে ( git add -A .) নিশ্চিত হন। আমি 30 মি বেকস হারিয়েছি কোন ফাইল ম্যাচ ছিল না। ধন্যবাদ!
ব্যবহারকারী9869932

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

2
গিট স্ট্যাশ ড্রপ স্ট্যাশ @ {0} সর্বশেষ
স্ট্যাশস

42

আপনি দুটি পদক্ষেপে এটি করতে পারেন:

  1. পরিবর্তিত ফাইলগুলি ফিরিয়ে দিন: git checkout -f
  2. চিহ্নবিহীন ফাইলগুলি সরান: git clean -fd

3
+1 কারণ সহজ। এছাড়াও কারণ এটি কার্যকর হয় এবং ওপিকে ওএমজি দিয়ে ওএমজি না করেই যা করতে চায় ঠিক তাই করে এটি সবকিছু মুছে ফেলবে।
গীকজস্টার

30

আমি ভেবেছিলাম এটা ছিল ( সতর্কতা: নিম্নলিখিত হবে সবকিছু অপনোদন )

$ git reset --hard HEAD
$ git clean -fd

resetপরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনতে। cleanকোনো untracked মুছে ফেলার জন্য Iles এবং irectories।


এটি কাজ করে না, git pullএরপরে কাজ করার পরেও CONFLICT (content): Merge conflict in...আমি একটি সংঘাতের সতর্কতা পেয়েছি : আমি কেবল git pull --strategy=ours
এটির


4

git clean -iপ্রথমে আপনাকে মুছে ফেলা আইটেমগুলি দেখিয়ে দেবে এবং আপনার নিশ্চয়তার পরে এগিয়ে যাবে। দুর্ঘটনাক্রমে মুছে ফেলা উচিত নয় এমন গুরুত্বপূর্ণ ফাইলগুলির সাথে ডিল করার সময় আমি এটি দরকারী মনে করি।

আরও git help cleanকিছু দরকারী বিকল্প সহ আরও তথ্যের জন্য দেখুন।


4

আপনি যদি সমস্ত পরিবর্তনগুলি বাতিল করতে চান তবে আপনি একটি উলামে বৈধ বিকল্পগুলির মধ্যে যে কোনওটি ব্যবহার করতে পারেন .gitconfig। এই ক্ষেত্রে:

[alias]
    discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"

ব্যবহার: git discard


1
এই উপন্যাসটি আমি খুব পছন্দ করি
পতাকা

3

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

আপনি এটি বর্তমান শাখায় এটি করতে পারেন:

git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git revert HEAD
git reset HEAD^^

অথবা আপনি এটি পৃথক হেডে করতে পারেন। (ধরে নিলাম আপনি BRANCHNAME শাখায় শুরু করছেন):

git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git checkout BRANCHNAME

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

git add -p  # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p  # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id)  # rebase on the commit id before the changes.
  # Remove the commits that say "DISCARD".

এটি আরও ভার্বোজ, তবে এটি আপনাকে ঠিক কী পরিবর্তনগুলি বাতিল করতে চান তা পর্যালোচনা করতে দেয়।

git lolএবংgit lola শর্টকাট এই ওয়ার্কফ্লোটি সঙ্গে খুব সহায়ক হয়েছে।



0

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

  1. প্রয়োজনীয় ফোল্ডারটির জন্য একটি প্রসঙ্গ মেনু আনুন এবং প্রত্যাবর্তন নির্বাচন করুন, এটি একটি রিভার্ট পপআপ দেখায় যেখানে আপনি পরিবর্তনগুলি পুনরুদ্ধার / পুনরুদ্ধার করতে ফাইলগুলি নির্বাচন করতে পারেন।
  2. আপনি যদি যুক্ত হওয়া ফাইলগুলি মুছে ফেলতে চান (যা এখনও গিটের মধ্যে নেই) ক্লিক করুন কমিট (একই প্রসঙ্গ মেনু থেকে) এটি কমিট পপআপটি উপস্থিত করে এবং আপনাকে যুক্ত করা ফাইলগুলি দেখায়, তারপরে প্রতিটিটিতে ডান ক্লিক করুন এবং মুছুন পছন্দ করুন। তবে এই পপআপে কমিট বিটিএন টিপুন না, যেমন আপনি কমিট করতে চান না, তবে কেবল যুক্ত ফাইলগুলি দেখুন এবং এখান থেকে এগুলি মুছুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.