গিট রিসেট - হ্যার্ড হেড পিছনে তালাবিহীন ফাইলগুলি ফেলে দেয়


584

আমি যখন দৌড়ে যাই git reset --hard HEAD, তখন আমি বুঝতে পারছি আপনি যেটা টানলেন তার একটি প্রাচীন সংস্করণে পুনরায় সেট করার কথা। দুর্ভাগ্যক্রমে, এটি ফাইলগুলিকে চারপাশে git statusফেলে রেখেছিল , যেমন একটি তালিকায় থাকা ফাইলগুলির একটি বড় তালিকা দেখায়।

আপনি গিটকে কীভাবে বলতে পারেন "শেষ টানে যা ছিল ঠিক একেবারে ফিরিয়ে আনুন, এর চেয়ে বেশি কিছুই নেই, কিছুই কম নয়"?


44
git reset --hardআপনার সূচকটি পুনরায় সেট করে এবং ট্র্যাক করা ফাইলগুলি হেডে থাকায় তারা আবার ফিরিয়ে দেয়। এটি অনতিযুক্ত ফাইলগুলি একা ফেলে দেয়।
ফিফিগিরি

উত্তর:


903

আপনার git clean -f -dকর্মের অনুলিপিটিতে অনতিযুক্ত ফাইল এবং ডিরেক্টরিগুলি থেকে মুক্তি পেতে আপনাকে ব্যবহার করতে হবে।

আপনার যদি সমস্ত গিট সাবমডিউলগুলি সহ মাস্টারটিতে পুরো সংগ্রহস্থলটি পুনরায় সেট করতে হয় তবে এই স্ক্রিপ্টটি চালান:

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status

56
এছাড়াও -xআপনি যদি আপনার .gitignored ফাইলগুলি মুছতে এবং একটি প্রাথমিক অবস্থায় ফিরে যেতে চান।
jtdubs

44
-nপরীক্ষায় যোগ করুন প্রথমে সরানো হবে। তাদের সকলকে একটি যুক্তিতে একত্রিত করুন:-dfn
হাইব্রিডিড

31
আমার সাধারণ কমান্ড git clean -qfdxএখানে। সবকিছু মুছে ফেলুন এবং নিঃশব্দে এটি করুন।
আরগায়ার

3
-d -fএর -dffজন্য দু'বার ডিক্যালার হতে পারে -d -f -f, এটি সুরক্ষিত অচিহ্নবদ্ধ রক্ষিত ডিরেক্টরিগুলি সহ সমস্ত আনট্র্যাকড ডিরেক্টরি মুছে ফেলবে।
থারস্মমনার

3
@ বি কে এসপুরজন: হ্যাঁ, এটি ফাইলগুলি মুছে দেয়। Unt আমি আনট্র্যাকড ফাইলগুলি আগের মতো চাই with এর অর্থ কী? গিট আনট্র্যাক করা ফাইলগুলি সম্পর্কে কিছুই জানে না, কেবলমাত্র সেগুলির অস্তিত্ব রয়েছে। এটি এই ফাইলগুলির একাধিক সংস্করণ ট্র্যাক করে না (যেহেতু তারা তালিকৃত নয় )।
নিটল

60

আপনার কাছে যদি ফাইল থাকে তবে আপনি এখনও রাখতে চান:

git clean -di একটি ইন্টারেক্টিভ ক্লিন করবে যা আপনাকে কেবল আর ফাইলগুলি / ডায়ারগুলি মুছতে দেয় যা আপনি আর চান না।


48
git reset --hard && git clean -dfx

বা, zsh একটি 'gpristine' ওরফে সরবরাহ করে:

alias gpristine='git reset --hard && git clean -dfx'

যা সত্যই সহজলভ্য।

যদি কাঁটাযুক্ত রেপোতে কাজ করা হয় তবে সঠিক রেপো / শাখা থেকে আনার এবং পুনরায় সেট করার বিষয়টি নিশ্চিত করুন, উদাহরণস্বরূপ:

git fetch upstream && git reset --hard upstream/master && git clean -df

8
দুঃখিত যদি এটি কোনও নিরাপদ আদেশ না হয় - আমি নিরাপদ থাকার চেষ্টা করছিলাম না, আমি প্রশ্নের উত্তর দেওয়ার চেষ্টা করছিলাম। এই প্রশ্নের উত্তর দেয় কিনা আপনি মন্তব্য করতে পারেন?
jjnevis

3
এটি ভাল কাজ করে এবং গিট আইএমএইচওতে তৈরি করা উচিত (যদিও আমি নিশ্চিত নই যে আমি নিয়মিত -x ব্যবহার করব)। এতবার আমি স্থানীয় প্রকল্পে কাজ করছি, গিথুব ইত্যাদির সাথে এখনও সিঙ্ক করা হয়নি, এবং একটি অগোছালো রিফ্যাক্টর আইডিই'র পূর্বাবস্থায় ফিরে যেতে পারা যায় না। আমার প্রবৃত্তিটি সর্বশেষ প্রতিশ্রুতিতে ফিরে যেতে কিন্তু এর জন্য গুগল করা সাধারণত পেনাল্টিমেট কমিটের উত্তর দেয়, শেষ প্রতিশ্রুতি নয়। আমি যা করতে চাই তা হ'ল সাম্প্রতিক প্রতিশ্রুতি ফিরে পেতে। এটি যে। যদিও একটি সহজ উপায় হওয়া উচিত। ধন্যবাদ লিনাস! ;-)
ডেল অ্যান্ডারসন 17

5
এটা তোলে বিপদজনক কারণ এটি ফাইল উপেক্ষিত মুছে ফেলে দিয়ে -xমত যদি আপনি শুধু রেপো ক্লোন করেছে চাই। যদি আপনি এটি চান তবে এটি নিখুঁত। আপনি যদি কেবল চিহ্নবিহীন ফাইলগুলি মুছতে চান , -xঅপশনটি সরানো ভাল কাজ করে।
এমিল বার্গারন

2
God gpristine
শ্বরের

2
এবং ইন্টেলিজ সেটিংস মুছে ফেলে;)
কল্পনা সনি

17

ব্যবহারকারী ইন্টারেক্টিভ পদ্ধতির:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y

-i ইন্টারেক্টিভ জন্য
-f জন্য ফোর্স
-d ডিরেক্টরি ডিরেক্টরি
-x উপেক্ষা করা ফাইলের জন্য (প্রয়োজনে যোগ করুন)

দ্রষ্টব্য: অ্যাড- এন বা --dry- রান এটি কী করবে তা পরীক্ষা করার জন্য।


4

আপনি ব্যবহার করতে পারেন git stash। আপনাকে নির্দিষ্ট করতে হবে --include-untracked, অন্যথায় আপনি মূল সমস্যাটি শেষ করবেন।

git stash --include-untracked

তারপরে স্ট্যাশ-এ কেবল শেষ প্রবেশটি ফেলে দিন drop

git stash drop

আপনি এটির git wipeজন্য একটি সহজেই ড্যান্ডি ওরফে তৈরি করতে পারেন এবং এটির জন্য কল করতে পারেন :

git config --global alias.wipe "! git stash -q --include-untracked && git stash drop -q"

2

আপনি যে আদেশটি সন্ধান করছেন তা হ'ল git clean


4
পরবর্তী সময় দয়া করে আরও কিছু বিবরণ / উদাহরণ ইত্যাদি যুক্ত করুন যা যা ব্যবহারকারীকে এটি কী করে তা বুঝতে সহায়তা করে এবং এই ক্ষেত্রে কোন পরামিতি ব্যবহার করতে হবে।
rugk

1

git-clean কার্যকারী গাছের মধ্যে থাকা চিহ্নবিহীন ফাইলগুলি সরাতে ব্যবহার করুন। নিম্নলিখিত কয়েকটি বিকল্প রয়েছে (সংক্ষেপে) যা git cleanকমান্ড সহ ব্যবহার করতে পারে ।

-dকোনও পাথ নির্দিষ্ট না করা হলে ব্যবহার করুন। সুতরাং অচিহ্নযুক্ত ডিরেক্টরিতে গিট পুনরাবৃত্তিগুলি সেগুলি সরিয়ে দেয়।

-f/--force নেস্টেড অন্রে্যাকড ফাইলগুলি সরানোর জন্য।

-i/--interactive কী হবে তা দেখান এবং ইন্টারেক্টিভভাবে ফাইলগুলি পরিষ্কার করুন।

-n/--dry-run কিছু না সরিয়ে কী হবে তা দেখান।

-x ফাইল উপেক্ষা করুন

উদাহরণ: git clean -f -d-> বর্তমান ডিরেক্টরিতে যে কোনও সাব-ডাইরেক্টরিতে সমস্ত অচিহ্নযুক্ত ফাইল সরান।


-16

আপনি হয়ত কোনও সময় নরম রিসেট করেছেন, আপনি এই সমস্যাটি সমাধান করতে পারেন

git add .
git reset --hard HEAD~100
git pull

7
আমি মনে করি না এটি ওপি চেয়েছিল। অন্য উত্তরগুলির মধ্যে যে কোনও একটি প্রকৃতপক্ষে এটি কীভাবে ঠিক করতে হয় তা দেখানোর একটি আরও ভাল কাজ করে।
অ্যাভেরি

1
আপনার যদি যুক্ত করতে প্রচুর ফাইল থাকে তবে এটি ধীর হতে পারে।
ডেভিন জি রোড

4
সম্পূর্ণ সম্পর্কহীন।
আজিম হাসনি

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