আমি কীভাবে গিটে অনাস্থাবিহীন পরিবর্তনগুলি বাতিল করব?


4815

আমি কীভাবে আমার কার্যকরী অনুলিপিগুলিকে সূচীতে নেই তা বাতিল করব?



24
উপরের আসেনারের মন্তব্য পরিষ্কার git-clean -dfকরা বিপজ্জনক হতে পারে। এটি স্থানীয় অপ্রকাশিত ফাইল মুছে ফেলবে (যেমন .gitignore দ্বারা আচ্ছাদিত) নীচে সমস্ত সাবধানে পড়ুন এবং গিট চেকআউট বিবেচনা করুন। পরিবর্তে
jacanterbury

15
'গিট ক্লিন-ডিএফ' সাবধান! আমি এটি চেষ্টা করেছি এবং কী ফোল্ডারগুলি হারিয়ে গেছে যা পুনরুদ্ধার করতে অক্ষম ... Ouch!
গাবে কারকানিস 21

46
আঘাত git statusকীভাবে এটি করতে একটি পরামর্শ দেয়! git checkout -- .
পাওলো

4
@Paulo: জুলাই 2019 সালে শুরু, git statusপরামর্শ দেয়: git restoregit restoreএই উদ্দেশ্যে ঠিক একটি নতুন আদেশ। দেখুন আমার 2019 আপডেট
প্রোসাইটোস

উত্তর:


2685

আর একটি দ্রুত উপায় হ'ল:

git stash save --keep-index --include-untracked

আপনি --include-untrackedযদি এ সম্পর্কে পুরোপুরি বিস্তৃত হতে না চান তবে আপনাকে অন্তর্ভুক্ত করার দরকার নেই ।

এর পরে, আপনি git stash dropযদি চান তবে কোনও আদেশ দিয়ে স্ট্যাশটি ফেলে দিতে পারেন।


121
এবং এ সম্পর্কে পুঙ্খানুপুঙ্খভাবে হতে, আপনিও চাইবেন --include-untracked
টিজে ক্রাউডার

9
@ করিমসমির: প্রশ্নটি বিশেষত এমন পরিবর্তনগুলি সম্পর্কে জিজ্ঞাসা করে যা সূচকে নেইgit resetকমান্ড খুব সূচক পরিবর্তন বাতিল করবে।
গ্রেগ হিউগিল

146
গিট চেকআউট -। অনেক দ্রুত
ফ্র্যাঙ্ক

38
না git stash, এবং git checkoutকোনওরকমই স্টেস্টহীন মোছা ছাড়বে না। ফলাফল হিসাবে git status, এখানে আসল সঠিক উত্তরটি কিছু স্বাদযুক্তgit reset HEAD
ক্রিস ওয়ার্থ ২ Chris

127
এটি স্ট্যাশ স্ট্যাককে দূষিত করে। git checkout -- .একটি কমান্ড দিয়ে কাজ করে।
ফিলিপ টোনলো

5331

বর্তমান চলমান ডিরেক্টরি ডিরেক্টরিতে সমস্ত অচিহ্নবদ্ধ ফাইলগুলির জন্য:

git checkout -- .

একটি নির্দিষ্ট ফাইল ব্যবহারের জন্য:

git checkout -- path/to/file/to/revert

--যুক্তি দ্বিখণ্ডিততা অপসারণ করতে এখানে ।


117
এটি গিট ক্যানোনিকাল উপায় বলে মনে হচ্ছে। যেমন আপনি যদি টাইপ করেন ঠিক git status
তেমন

27
যদি তালিকৃত ফাইল না থাকে তবে কাজ করে না। গিট বলে error: The following untracked working tree files would be overwritten by checkout: ...
মাইকেল আইলেস

92
নবাগত প্রশ্ন, "গিট চেকআউট -" কী করে। অর্থহীন মানে?
কয়েদ

119
@ নিনজ্যাকের git checkout -- .অর্থ একই জিনিস git checkout ., আপনি ব্রাঞ্চের নামটি নির্দিষ্ট করে দিচ্ছেন না তা বাদ দিয়ে আপনি তা স্পষ্ট করে বলছেন। তারা উভয়ই বলছে যে আমি বর্তমানে যে শাখায় আছি তার জন্য হেড সংস্করণটি চেকআউট করুন '' বা './'। আপনি যদি git checkout branch-name directory-or-file-nameসাধারণভাবে করেন তবে আপনি directory-or-file-nameশাখায় হেড সংস্করণ পাবেন branch-name
akgill

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

1897

দেখে মনে হয় সম্পূর্ণ সমাধানটি হ'ল:

git clean -df
git checkout -- .

git cleanসমস্ত চিহ্নবিহীন ফাইল সরিয়ে দেয় ( সতর্কতা : এটি সরাসরি .gitignore এ উল্লিখিত উপেক্ষা করা ফাইলগুলি মুছে ফেলবে না, এটি ফোল্ডারে থাকা উপেক্ষা করা ফাইলগুলি মুছতে পারে ) এবং git checkoutসমস্ত অনাস্থিত পরিবর্তন সাফ করে।


116
অন্য দুটি উত্তর আসলে কাজ করে না, এটি একটি করেছিল।
জন হান্ট

18
@ ডভাল এটি প্রথম কমান্ডটি আন-ইনডেক্সযুক্ত ফাইলগুলি সরিয়ে ফেলেছে এবং দ্বিতীয়টি অচিহ্নবদ্ধ পরিবর্তনগুলি (সূচিযুক্ত ফাইলগুলির) সরিয়ে দিয়েছে ues সুতরাং যদি আপনার কোনও পর্যায়ক্রমে পরিবর্তন না হয় তবে এটি শেষ প্রতিশ্রুতিতে ফিরে যাওয়ার সমতুল্যgit reset --hard
আমানুয়েল নেগা

3
-ট্র্যাকড ডিরেক্টরি যদি গিট ক্লোন হয় তবে -dff ব্যবহার করুন ।
অ্যাকুয়া

87
গিট ক্লিন-ডিএফ চালাতে সাবধান হন। এটি কী করে তা আপনি যদি বুঝতে না পারেন তবে আপনি
রবোট

40
@ ক্যাটলকি যেমন বলেছে, প্রথম কমান্ডটি ডিরেক্টরিগুলিও মুছে ফেলা হয় যদি সেগুলি কেবল উপেক্ষা করা ফাইলের সমন্বয়ে গঠিত হয় ... আমার প্রকল্পে কনফিগারেশন ফাইলগুলির পুরো গোছা হারিয়ে গেছে :( সাবধানতা অবলম্বন করুন
ম্যাক্সিমাম লরান্ট

326

এটি বর্তমান ডিরেক্টরি থেকে বর্তমান ডিরেক্টরি থেকে ফাইলের সমস্ত পরিবর্তন দূরে সরিয়ে বর্তমান ডিরেক্টরিটির বর্তমান সূচকটি পরীক্ষা করে।

git checkout .

বা এটি সূচক থেকে সমস্ত ফাইল পরীক্ষা করে, কার্যকারী ট্রি ফাইলগুলিকে ওভাররাইট করে।

git checkout-index -a -f

28
হাই, এর মধ্যে পার্থক্য কি git checkout .এবং git checkout -- .?
ইভান হু

5
@ ইভান: এই ক্ষেত্রে কোনও পার্থক্য নেই।
রবার্ট সিমার

10
@ রবার্ট সিমার এবং সাধারণ ক্ষেত্রে?
আরজেফালকোনার

2
@ ইভান: এই প্রশ্নটি জিজ্ঞাসা করার জন্য খারাপ জায়গা। - এটি ওপি-র প্রশ্নের সাথে সম্পর্কিত নয়, এবং উত্তরটির সাথে এখানে সম্পর্কিত নয়।
রবার্ট সিমার

14
+1 এটি সঠিক উত্তর, কারণ এটি সঠিকভাবে পরিচালনা করে যেখানে কিছু ফাইল উভয় পর্যায়ক্রমে এবং বিনা পর্যায়ক্রমে পরিবর্তন হয় changes দ্রষ্টব্য যে এই সমাধানটি অযাচিত পরিবর্তনগুলি অস্বীকার করে; যদি আপনি এগুলি ধরে রাখতে চান তবে আপনার @ গ্রেগ-হিউগিলের উত্তরটি ব্যবহার করা উচিত git stash save --keep-index
রোববার্ব

248
git clean -df

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

-d: চিহ্নবিহীন ফাইলগুলি ছাড়াও তালিকাভুক্ত ডিরেক্টরিগুলি সরান

-f: ফোর্স (উপর নির্ভর করে প্রয়োজনীয় হতে পারে না) clean.requireForce সেটিং এর )

চালান git help cleanম্যানুয়াল দেখতে


কেন এই উত্তরে সমস্ত ভোট নেই? ২০১১ সালে জবাব দেওয়া হয়েছে এবং এখনও সঠিক।
ইউজিন ব্রাজিনিটস

106

আমার পছন্দ

git checkout -p

এটি আপনাকে নির্বাচিতভাবে খণ্ডগুলি ফিরিয়ে আনতে দেয়।

আরো দেখুন:

git add -p

9
সত্যিকারের পরিবর্তনটি ফেলে দেওয়ার আগে আমি তার ক্ষমতাটি দেখতে পছন্দ করি।
Penghe Geng

এটিই আমি ব্যবহার করি। গিট চেকআউট-পি এবং তারপরে সমস্ত মানতে "এ" দিন।
ম্যাটিস

2
আমি কখনই ভাবিনি। এটি -pসুরক্ষার একটি দুর্দান্ত অতিরিক্ত স্তর যুক্ত করে। git clean -dওপিকে উত্তর দেওয়ার জন্য এটি একত্রিত করুন ।
স্টিফান হেনিংসেন

96

যেহেতু কোনও উত্তর আমার সঠিক বিকল্প বিকল্পের সংমিশ্রণের পরামর্শ দেয় না, তা এখানে:

git clean -dfx
git checkout .

এটি ব্যবহৃত git cleanবিকল্পগুলির জন্য অনলাইন সহায়তা পাঠ্য :

-d

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

-f

গীত কনফিগারেশন পরিবর্তনশীল যদি clean.requireForceসেট করা নেই false, গীত পরিষ্কার যদি না দেওয়া ফাইল বা ডিরেক্টরি মুছে ফেলতে আপত্তি করবে -f, -nঅথবা -i। গিট .gitসাব - ডাইরেক্টরি বা ফাইলের মধ্যে ডিরেক্টরিগুলি মুছতে অস্বীকার করবে , যদি না দ্বিতীয় সেকেন্ড -fদেওয়া হয়।

-x

.gitignore(প্রতি ডিরেক্টরি) থেকে উপেক্ষা করার নিয়মগুলি ব্যবহার করবেন না এবং $GIT_DIR/info/excludeতারপরেও -eবিকল্পগুলির সাথে প্রদত্ত উপেক্ষা নিয়মগুলি ব্যবহার করবেন না । এটি বিল্ড পণ্য সহ সমস্ত অনার্যাকড ফাইলগুলি সরিয়ে ফেলার অনুমতি দেয়। এটি git resetএকটি পরিষ্কার বিল্ড পরীক্ষা করার জন্য একটি প্রাকৃতিক ওয়ার্কিং ডিরেক্টরি তৈরি করতে (সম্ভবত এর সাথে মিলিতভাবে ) ব্যবহার করা যেতে পারে ।

এছাড়াও, git checkout .রেপোর মূলটি করা দরকার।


এই সমাধানের জন্য +1। আপনার মন্তব্য সম্পর্কে যে "গিট চেকআউট। রেপোর গোড়ায় করা দরকার", সম্ভবত আপনি উল্লেখ করতে পারেন আমরা কেবল git reset --hardপরিবর্তে করতে পারি ? (যা আসলে git reset --hard HEADবর্তমান ডিরেক্টরি যা হতে পারে তার সমান এবং কাজ করা উচিত ...)
এরিকএমডি

2
প্রথম কমান্ডটি সম্পর্কেও git clean -dfx, এটি চালানোর git clean -d -x -nআগে নিরাপদ দিকে থাকতে আমি এখানে একটি টিপ দিচ্ছি: ফাইল-টু-অপসারণের তালিকা প্রদর্শন করতে কেবল আগে চালান , তারপরে চালিয়ে অপারেশনটি নিশ্চিত করুন git clean -d -x -f(আমি যুক্তিটি রেখেছি) -n, -fশেষ পর্যন্ত দ্রুত এটি একটি টার্মিনালে পরিবর্তন করতে সক্ষম হবার জন্য)
এরিকএমডি

5
দ্রুত নোট করুন যে এটিটি ফিরে না পারা যায় এবং আপনার যদি ফাইল .gitignoreথাকে তবে সেগুলি হারাবেন। সুতরাং এর আগে আপনার প্রকল্পের ব্যাক আপ বিবেচনা করুন।
রব

69

আপনি যদি কেবল বিদ্যমান ফাইলগুলিতে পরিবর্তনগুলি সরাতে চান তবে ব্যবহার করুন checkout( এখানে ডকুমেন্টেড )।

git checkout -- .
  • কোনও শাখা নির্দিষ্ট করা হয়নি, সুতরাং এটি বর্তমান শাখাটি পরীক্ষা করে।
  • ডাবল হাইফেন ( --) গিটকে বলেছে যে এরপরে যা ঘটে তার দ্বিতীয় যুক্তি (পথ) হিসাবে নেওয়া উচিত, আপনি একটি শাখার স্পেসিফিকেশন এড়িয়ে গেছেন।
  • পিরিয়ড ( .) সমস্ত পথ নির্দেশ করে।

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

git clean -i 
  • -iবিকল্প প্রারম্ভিক একটি ইন্টারেক্টিভ clean, ভুল মুছে প্রতিরোধ।
  • দ্রুত কার্যকর করার জন্য মুষ্টিমেয় অন্যান্য বিকল্প উপলব্ধ; ডকুমেন্টেশন দেখুন।

যদি আপনি পরে অ্যাক্সেসের জন্য একটি হোল্ডিং স্পেসে পরিবর্তনগুলি স্থানান্তর করতে চান তবে ব্যবহার করুন stash( এখানে ডকুমেন্টেড ):

git stash
  • সমস্ত পরিবর্তনগুলি সম্ভবত পরবর্তী অ্যাক্সেসের জন্য গিটের স্ট্যাশে স্থানান্তরিত হবে।
  • আরও কিছু সংখ্যক স্ট্যাশিংয়ের জন্য কয়েকটি মুখ্য বিকল্প উপলব্ধ; ডকুমেন্টেশন দেখুন।

এটি ঠিক আপনার পরিবর্তনগুলিকে রূপান্তর করবে এবং পূর্ববর্তী প্রতিশ্রুতি থেকে নতুন যুক্ত হওয়া ফাইলগুলি বাতিল করবে।
যোহান চুং

ব্যাখ্যার জন্য এটি উন্নত করে :)
আর্চি জি কুইনস

62

কখন এই আদেশটি ব্যবহার করতে হবে তা বোঝাতে আমি এই নিবন্ধটি সত্যই সহায়ক বলে খুঁজে পেয়েছি: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

কয়েকটি পৃথক মামলা রয়েছে:

  1. আপনি যদি ফাইলটি মঞ্চস্থ না করেন তবে আপনি ব্যবহার করুন git checkout। চেকআউট "সূচীকরণের সংস্করণটির সাথে মেলে কার্যকারী ট্রিতে ফাইল আপডেট করে"। যদি ফাইলগুলি মঞ্চস্থ না করা হয় (ওরফে সূচীতে যুক্ত করা হয়েছে) ... এই আদেশটি মূলত ফাইলগুলি আপনার শেষ প্রতিশ্রুতিবদ্ধতাকে ফিরিয়ে আনবে।

    git checkout -- foo.txt

  2. আপনি যদি ফাইলটি মঞ্চস্থ করেন তবে গিট রিসেটটি ব্যবহার করুন। পুনরায় সেটটি অঙ্গীকারের সাথে মেলে সূচি পরিবর্তন করে।

    git reset -- foo.txt

আমার সন্দেহ হয় যে ব্যবহারটি git stashজনপ্রিয় পছন্দ যেহেতু এটি কিছুটা কম বিপজ্জনক। গিট রিসেট ব্যবহার করার সময় আপনি দুর্ঘটনাক্রমে খুব বেশি দূরে ফুঁসে উঠলে আপনি সর্বদা এটিতে ফিরে যেতে পারেন। রিসেটটি ডিফল্টরূপে পুনরাবৃত্ত হয়।

আরও পরামর্শের জন্য উপরের নিবন্ধটি একবার দেখুন।


60

এটি করার সহজ উপায় হ'ল এই আদেশটি ব্যবহার করে:

এই নির্দেশটি কার্যক্ষম ডিরেক্টরিতে পরিবর্তনগুলি বাতিল করতে ব্যবহৃত হয় -

git checkout -- .

https://git-scm.com/docs/git-checkout

গিট কমান্ডে, তালিকাভুক্ত ফাইল স্ট্যাশিং ব্যবহার করে অর্জন করা যায়:

git stash -u

http://git-scm.com/docs/git-stash


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

2
আমার অন্যান্য ডিরেক্টরি পরিবর্তন না করেই একটি উপ ডিরেক্টরিতে সমস্ত স্থানীয় পরিবর্তনগুলি থেকে মুক্তি পাওয়া দরকার। এই উত্তরটি অনেক সাহায্য করেছে, ধন্যবাদ
অ্যালি

2
দুটি কমান্ড কী করে দয়া করে তা বর্ণনা করুন। এটির কোনও ব্যাখ্যা না পাওয়া সত্যিই অসহনীয়।
ক্রিস কেনেডি

2
চমৎকার। চেকআউট একটি কমান্ডে করে যা সবচেয়ে জনপ্রিয় দুটিতে কী করে। git clean -fdসূচীতে না থাকা ফাইলগুলি পরিষ্কার করার জন্যও অনুসরণ করা যেতে পারে ।
ওলিগোফ্রেন

49

আপনি যদি স্টেস্টেড পরিবর্তনগুলি (বিশেষত যদি মঞ্চ পরিবর্তনগুলি নতুন ফাইল হয়) রক্ষা করতে আগ্রহী না হন তবে আমি এই কার্যকরটি পেয়েছি:

git diff | git apply --reverse

44

git checkout -f


man git-checkout:

-f, --force

শাখাগুলি স্যুইচ করার সময়, সূচী বা কার্যক্ষম গাছটি হ্যাড থেকে পৃথক হয়ে গেলেও এগিয়ে যান। এটি স্থানীয় পরিবর্তনগুলি ছুঁড়ে ফেলার জন্য ব্যবহৃত হয়।

সূচক থেকে পাথগুলি পরীক্ষা করার সময়, নিমজ্জিত এন্ট্রিগুলিতে ব্যর্থ হবেন না; পরিবর্তে, নিমজ্জিত এন্ট্রি উপেক্ষা করা হয়।


2
এটি সূচকে পরিবর্তনগুলি বাতিল করবে !! (এবং
ওপিগুলিকে

44

আপনি গিট স্ট্যাটাস টাইপ করার সাথে সাথে, (ওয়ার্কিং ডিরেক্টরিতে পরিবর্তনগুলি বাতিল করতে "গিট চেকআউট - ..." ব্যবহার করুন) প্রদর্শিত হবে।

যেমন git checkout -- .


1
ডাউনভোটেড কারণ এটি দ্রুত সমস্ত ফাইল ফেলে দিতে সহায়তা করে না। তিনটি বিন্দু নির্দেশ করে যে আপনাকে সমস্ত ফাইলের তালিকা তৈরি করতে হবে। এটি বিশেষত খারাপ যদি আপনার একবারে টন ফাইল ফেলে দিতে হয়, যেমন। আপনি রাখতে চান এমন সমস্ত পরিবর্তন মঞ্চ করার পরে একটি বৃহত মার্জ চলাকালীন
usr-local-

2
অবশ্যই, সঠিক আদেশটি হ'ল "গিট চেকআউট -"। একটি বিন্দু মন্তব্যে, তিনটি বিন্দু ব্যাকরণগত জিনিস ছিল, আরও অনেক অপশন রয়েছে যেগুলি ব্যবহার করা যেতে পারে তা
বোঝাতে

39

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

git add .
git stash

আপনি যদি ঠিক করেন যে সবকিছু ঠিক আছে, তবে স্ট্যাশ ফেলে দিন:

git stash drop

বিলাল মকসূদের উত্তরটি git cleanআমার পক্ষেও কাজ করেছিল, তবে স্ট্যাশ দিয়ে আমার আরও নিয়ন্ত্রণ থাকে - যদি আমি দুর্ঘটনাক্রমে স্টাফ করি তবে আমি এখনও আমার পরিবর্তনগুলি ফিরে পেতে পারি

হালনাগাদ

আমার মনে হয় আরও 1 টি পরিবর্তন আছে (কেন জানি না এটি আগে আমার জন্য কাজ করেছিল):

git add . -A পরিবর্তে git add .

-Aসরানো ফাইল ছাড়া মঞ্চস্থ করা হবে না


38

2019 আপডেট:

যেহেতু জুলাই 2019 , একটি নতুন কমান্ড যা ঠিক এই আছে হয়েছে: git restore

ইন git status, এখন গিট পরিবর্তে এই আদেশটি ব্যবহার করার পরামর্শ দেয়git checkout ব্যবহার করার ব্যবহার করার পরামর্শ দিচ্ছে।

যদিও এই কমান্ডটি একটি নির্দিষ্ট প্রতিশ্রুতিতে কার্যনির্বাহী গাছ পুনরুদ্ধার করতে বা সূচকের বিষয়বস্তু পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে, ডিফল্টরূপে, কার্যক্ষম গাছটি সূচীতে রাজ্যে পুনরুদ্ধার করা হয় (এখানে কী জিজ্ঞাসা করা হয়)।

সুতরাং, কোনও পাথস্পেকের সাথে মিলিত ফাইলগুলি পুনরুদ্ধার করার জন্য (তাদের অযাচিত পরিবর্তনগুলি থেকে মুক্তি পেয়ে) আপনি এটি করতে পারেন:

git restore <pathspec>

উদাহরণস্বরূপ, বর্তমান ডিরেক্টরিতে থাকা সমস্ত অচিহ্নবদ্ধ পরিবর্তনগুলি পুনরুদ্ধার করতে আপনি চালাতে পারেন:

git restore .

আপনি যদি প্রকল্পের মূল থেকে এটি চালনা করেন তবে এটি পুরো সংগ্রহস্থলের সমস্ত অনাস্থাবিহীন পরিবর্তনগুলি পুনরুদ্ধার করবে।

দ্রষ্টব্য, যেমন git checkout -- .(মারিউজ নওকের নির্দেশ অনুসারে) এটি কেবল গিতের দ্বারা ট্র্যাক করা ফাইলগুলিতে পরিবর্তনগুলি বাতিল করবে এবং কোনও নতুন তালিকাহীন ফাইলগুলিকে ছাড়বে না। আপনি যদি নতুন চিহ্নবিহীন ফাইলগুলি সহ কোনও স্টেস্টেড পরিবর্তনগুলি বাতিল করতে চান তবে আপনি অতিরিক্ত চালাতে পারেন:

git clean -df

এই পরবর্তী কমান্ডটি সম্পর্কে খুব সতর্কতা অবলম্বন করুন কারণ আপনি যে ফাইলগুলি পরিত্রাণ পেতে চাননি তা বাতিল করতে পারেন।


দ্রষ্টব্য git restore: এটি একটি নতুন কমান্ড হিসাবে, এর ম্যান পৃষ্ঠাটি একটি সতর্কতা দেয়:

এই আদেশটি পরীক্ষামূলক। আচরণের পরিবর্তন হতে পারে।

সুতরাং ভবিষ্যতে আচরণের পরিবর্তন হলে এই উত্তরটি পুরানো হয়ে যেতে পারে। সুতরাং man git-restoreএটি ব্যবহার করার আগে দ্রুত চালানো বুদ্ধিমানের কাজ হতে পারে ।


2
আমি কেবলমাত্র নতুন যুক্ত হওয়া ফাইলগুলিকে প্রভাবিত না করেই আমার আনস্টেজ করা পরিবর্তনগুলি ফিরিয়ে নিতে চেয়েছিলাম যাতে git restore .সম্পূর্ণরূপে কাজ হয় worked ধন্যবাদ।
সৌরভ মিশ্রা

3
আমি করেছি git restore <filename>এবং এটি পুরোপুরি কাজ করেছে।
মের্লিন

1
আমার জন্য ভাল কাজ করে।
প্রমিথিউস

1
ম্যান পৃষ্ঠা অনুসারে git restore .সমস্ত ডিরেক্টরি পুনরুদ্ধারগুলিতে নয়, বর্তমান ডিরেক্টরিতে সমস্ত ফাইল পুনরুদ্ধার করে।
জার্নো

1
তুমি ঠিক. ধন্যবাদ! আমি কেবল এটি পরীক্ষা করেছি এবং প্রকৃতপক্ষে, এটি ক্ষেত্রে। এটি অবশ্য পুনরাবৃত্তিযোগ্য। সুতরাং যখন প্রকল্পের মূল থেকে চালানো হয়, এটি পুরো সংগ্রহস্থলের ক্ষেত্রে প্রযোজ্য। আমি আমার উত্তর সম্পাদনা করব।
প্রোসাইটোস

35

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

তাই আমি গিট রিসেট করার সময় তারা সেখানে না বসে তা নিশ্চিত করার জন্য আমি এটি করি (পরে - মূল / শাখার নামটিতে গিটিগনোরগুলি বাদ দেয়)

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

git add --all

তখন আমি

git fetch --all

তারপরে আমি উত্সে পুনরায় সেট করি

git reset --hard origin/branchname

এটি এটিকে আবার স্কোয়ারে রেখে দেবে। ব্রাঞ্চকে পুনরায় ক্লোনিং করার মতো, আমার সমস্ত গিটিংগর্ড ফাইলগুলি স্থানীয়ভাবে এবং জায়গায় রেখে দেওয়া ILE

নীচে ব্যবহারকারীর মন্তব্য অনুসারে আপডেট হয়েছে: ব্যবহারকারী যে বর্তমান শাখায় চালু রয়েছে তা পুনরায় সেট করতে বৈকল্পিক।

git reset --hard @{u}

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

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

সেন্স বানানো। আমি উইন্ডোজটি ব্যবহার করি না তাই এই সমস্যাটি দেখেনি (গত কয়েক মাস ধরে উইন্ডোজ ব্যবহার করা হয়নি, এর আগে খুব বেশি কিছু মনে নেই - এটি একটি বিশাল আফসোসযোগ্য অস্পষ্টতা)। আপনার মূল উত্তরে যুক্তিটি লক্ষ্য করার মতো হতে পারে :)
এক্সটিআরএম জোশ

আমি এখনই একটি ম্যাক নিয়ে এই সমস্যাটি ছড়িয়েছি। যদি রেপোতে ফাইলটি ট্র্যাক না করা হয় তবে কখনও কখনও গিট রিসেট এটি স্পর্শ করে না। আমি সত্যিই "কেন" আলাদা করতে পারি না তবে যখন তা ঘটে, যদি আমি পুনরায় সেট করি এবং আমার এখনও 1 টি অনিবন্ধিত ফাইল বা দুটি থাকে, আমি আবার সমস্ত পুনরায় সেট করব
নিক

2
আমার git reset --hard @{u}
এটির

31

উপরের সমস্ত সমাধান চেষ্টা করেও তবুও নতুন, স্টেস্টেড ফাইল থেকে মুক্তি পাওয়া যায়নি।

সতর্কতার সাথেgit clean -f - এই নতুন ফাইলগুলি সরাতে ব্যবহার করুন ! বল বিকল্পটি নোট করুন।


21

সহজভাবে বলুন

git stash

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

git stash apply 

বা গিট স্ট্যাশ পপ


21

শুধু ব্যবহার করুন:

git stash -u

সম্পন্ন. সহজ।

আপনি যদি সত্যিই আপনার স্ট্যাশ স্ট্যাকের বিষয়ে যত্নশীল হন তবে আপনি এটি অনুসরণ করতে পারেন git stash drop। তবে সেই মুহুর্তে আপনি (মারিউজ নওক থেকে) ব্যবহার করা ভাল:

git checkout -- .
git clean -df

তবুও, আমি git stash -uসেরাটি পছন্দ করি কারণ এটি কেবল একটি কমান্ডে ট্র্যাকড এবং ট্রেড করা সমস্ত পরিবর্তন "বাতিল" করে । তবুও git checkout -- .শুধুমাত্র পরিত্যাগ পরিবর্তন এবং ট্র্যাক git clean -dfশুধুমাত্র পরিত্যাগ untracked পরিবর্তন ... এবং উভয় কমান্ড টাইপ হয় পর্যন্ত খুব বেশী কাজ :)


নোট: git stash -uহবে শীঘ্রই (গীত 2.14.x / 2.15, চতুর্থাংশ 3 2017) একটু অভিব্যক্ত: stackoverflow.com/a/46027357/6309
VonC

আমি যদি ওপির প্রশ্নটি পাই তবে সূচকযুক্ত ফাইলগুলি রাখা উচিত। শুধুমাত্র স্টেস্ট পরিবর্তনগুলি সরানো উচিত। তাই git stash -kআমার মতে হওয়া উচিত ।
স্ন্যাপ করুন

21

একটি স্থায়ী বাতিল করতে হবে: git reset --hard

পরবর্তী সময়ের জন্য পরিবর্তনগুলি সংরক্ষণ করতে: git stash


16

এটি এমনকি ডিরেক্টরিতেও কাজ করে; সাধারণ গিট অনুমতি বাইরে।

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

আমার সাথে সম্প্রতি হয়েছে


যদিও সাবধান, গিট উপেক্ষা করা বিষয়বস্তু এর মূল অনুমতিগুলি ধরে রাখবে না! সুতরাং এটি একটি সুরক্ষা ঝুঁকি তৈরি করতে পারে।
twojrr

@twicejr আপনি ভুল, অনুগ্রহ করে git help clean"-ড্রেডবিহীন ফাইলগুলি ছাড়াও ট্রেড করা ডিরেক্টরিগুলি সরান" read
গ্লাসঘস্ট

আপনি কেন আপনার সমস্ত ফাইলকে বিশ্ব পাঠ / লেখার জন্য সেট করলেন? ভাল অনুশীলন না।
ঘোটি

@ ক্ষতি আমার খারাপ, 664 ঠিক আছে? আপনি উত্তর সম্পাদনা করতে স্বাগত জানাই।
গ্লাসগোস্ট

সমস্ত অনুমতি 664 এ সেট করা প্রকল্পকে কী ধরণের অনুমতি প্রয়োজন তা নিয়ে প্রচুর অনুমান করা যায়। আমি মনে করি কমান্ডের সেই অংশটি ব্যবহার করা কিছু লোকের জন্য সমস্যা সৃষ্টি করবে।
ianrandmckenzie


14
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory

12

আমার মতে,

git clean -df

কৌতুক করা উচিত। অনুযায়ী Git পরিষ্কার উপর গীত ডকুমেন্টেশন

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

বিবরণ

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

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

যদি কোনও ...চ্ছিক ... আর্গুমেন্ট দেওয়া হয় তবে কেবল সেগুলিই ক্ষতিগ্রস্থ হয়।

বিকল্প

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

-ফ - ফোর্স যদি গিট কনফিগারেশন ভেরিয়েবল ক্লিন.রেকায়ারফর্সটি মিথ্যাতে সেট না করা থাকে তবে -f, -n বা -i না দিলে গিট ক্লিন চালানো অস্বীকার করবে।


11

আপনার রেপো কী অবস্থায় আছে তা আপনি সর্বদা আগের কোনও প্রতিশ্রুতিতে পুনরায় সেট করতে পারেন:

git reset --hard <commit hash>

এটি সেই সমস্ত পরিবর্তনগুলি বাতিল করে দেবে যা সেই প্রতিশ্রুতি দেওয়ার পরে করা হয়েছিল।


2
এটি সূচকের সমস্ত কিছুও ফেলে দেবে (কেবল সূচিগুলিতে নয় এমন জিনিসগুলি), যা ওপি যা চাইছে তার বাইরে।
লিনাস আরভার

10

নতুন ফাইলগুলি যা গিট ক্লিন-ডিএফ-এর চেয়ে বেশি সুনির্দিষ্ট of লুকোবার জায়গা।

এই কৌশলটি কার্যকর যখন কোনও কারণে, আপনি কোনও সাধারণ প্রক্রিয়া (যেমন আরএম এর মাধ্যমে) অচিহ্নযুক্ত সমস্ত ফাইল সহজেই মুছে ফেলতে পারবেন না।


9

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

আমার একই রকম সমস্যা ছিল, সম্ভবত অভিন্ন নয়, এবং আমার সমাধানটি আদর্শ নয় বলে দুঃখ বোধ করছি তবে এটি শেষ পর্যন্ত কার্যকর।

আমার প্রায়শই এই জাতীয় গিট স্ট্যাটাস বার্তা থাকত (কমপক্ষে 2/4 ফাইল জড়িত):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

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

আমি আমার কাঁটাযুক্ত সংগ্রহস্থল এবং সমস্ত স্থানীয় সংগ্রহস্থল এবং সংশোধন করে সমস্যাটি সমাধান করতে সক্ষম হয়েছি। এটি একা যথেষ্ট ছিল না; আপস্ট্রিমে প্রশ্নযুক্ত ফাইলগুলির নতুন নামকরণ করতে হয়েছিল। যতক্ষণ না আপনার কোনও আপত্তিজনক কাজ নেই, উইকি নেই এবং আপস স্টোরের সংগ্রহস্থল থেকে সরিয়ে নেওয়া কোনও সমস্যা নেই, আপনার ঠিক হওয়া উচিত। আপस्ट्रीम আপনার সাথে খুব খুশি নাও হতে পারে, কমপক্ষে বলতে গেলে। আমার সমস্যা হিসাবে এটি নিঃসন্দেহে এটি একটি ব্যবহারকারীর ত্রুটি কারণ আমি গিট নিয়ে তেমন দক্ষ নই, তবে গিটের সাথে ইস্যুতে পয়েন্ট ফিক্স করাও খুব সহজ easy


7

আপনি যখন অন্য কারও কাছে স্ট্যাশ স্থানান্তর করতে চান:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

মন্তব্য করা [সম্পাদনা] হিসাবে, স্ট্যাশগুলির নামকরণ করা সম্ভব। ভাল, আপনি যদি নিজের স্ট্যাশ ভাগ করতে চান তবে এটি ব্যবহার করুন;)


5
আসলে গিট স্ট্যাশের একটি শিরোনাম থাকতে পারে। উদাহরণস্বরূপ git stash save "Feature X work in progress"
কলিন ডি বেনেট

7

আপনি নিজের নিজস্ব উপনাম তৈরি করতে পারেন যা এটি বর্ণনামূলক উপায়ে কীভাবে করবেন তা বর্ণনা করে।

পরিবর্তনগুলি বাতিল করতে আমি পরের উপনামটি ব্যবহার করি।


কার্যকারী ট্রিতে ফাইলের (তালিকা) পরিবর্তনগুলি বাতিল করুন

discard = checkout --

তারপরে আপনি এটিকে সমস্ত পরিবর্তনগুলি বাতিল করতে পরবর্তী হিসাবে ব্যবহার করতে পারেন:

discard .

বা কেবল একটি ফাইল:

discard filename

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

কার্যকারী গাছের মধ্যে থাকা পরিবর্তনগুলি এবং তালিবদ্ধ ফাইলগুলি সাফ করুন এবং বাতিল করুন discard

cleanout = !git clean -df && git checkout -- .

সুতরাং ব্যবহার পরবর্তী হিসাবে সহজ:

cleanout

এখন পরবর্তী গিথুব রেপোতে পাওয়া যাচ্ছে যাতে প্রচুর উপাধি রয়েছে:


7

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

গিট আরএম। গিটট্রিবিউটস
গিট অ্যাড -এ
গিট রিসেট --হার্ড

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