গিট ইনডেক্স থেকে কোনও ফাইল সরিয়ে ফেলবেন কীভাবে?


355

ফাইল সিস্টেম থেকে অপসারণ না করে সূচী (= স্টেজিং এরিয়া = ক্যাশে) থেকে কোনও ফাইল কীভাবে সরানো যায়?


5
আপনি কি বলতে চান যে "আগে যা ছিল সেখানে পুনরায় সেট করুন" বা "মুছুন, কারণ আমি সেই ফাইলটি আর চাই না"?
অ্যান্ড্রু আইলেট

আমার ক্ষেত্রে এটি একই কারণ ফাইলটি এর আগে উপস্থিত ছিল না ...
hcs42

উত্তর:


504

তুমি চাও:

git rm --cached [file]

আপনি যদি --cachedবিকল্পটি বাদ দেন তবে এটি কার্যকারী গাছ থেকেও মুছে ফেলবে। git rmতুলনায় কিছুটা নিরাপদ git reset, কারণ মঞ্চস্থ সামগ্রী যদি শাখার ডগা বা ডিস্কের ফাইলের সাথে মেলে না তবে আপনাকে সতর্ক করা হবে। (যদি তা না হয় তবে আপনাকে যুক্ত করতে হবে --force))


8
এটিও দুর্দান্ত কাজ করে যদি উদাহরণস্বরূপ আপনি কিছু বিল্ড ইন্টারমিডিয়েটগুলি বা স্থানীয় কনফিগারেশন ফাইল যা আপনার .gitignore এ তৈরি করে নি সেগুলি চেক করে; ব্যবহার git rm --cached, তাদের রেপো থেকে অপসারণ করার জন্য .gitignore, মঞ্চ প্রাসঙ্গিক ফাইল বা ডিরেক্টরি যোগ করতে পারেন এবং স্বাভাবিক হিসাবে কমিট। এগুলি রেপো থেকে চলে যাবে তবে তারা আপনার স্থানীয় গাছে ছোঁয়া থাকবে এবং আপনি দুর্ঘটনাক্রমে এগুলি আবার চেক করবেন না।
আয়নোক্লাস্ট ব্রিগহাম

22
এটি প্রতিশ্রুতিবদ্ধ এবং চাপ দেওয়ার পরেও রেপো (রিমোট) থেকে ফাইলটি মুছে দেয়।
পাউডার366

6
এটি সূচক থেকে সরিয়ে দেয় না, তবে এটি সূচীতে মুছে ফেলা হিসাবে চিহ্নিত করে।
জোটাবি

4
এই উত্তরটি সম্ভবত ভুল কারণ এটি রেপো থেকে একটি ফাইল সরিয়ে দেয় (যেমন ইতিমধ্যে উল্লিখিত @ পাউডার 366) যা উদ্দেশ্যযুক্ত ফলাফল নয়।
ওটোমো

1
এই সমাধানটি আমার পক্ষে কার্যকর হয়নি। এটি নির্দিষ্ট করা ফাইলটিকে মুছে ফেলা হিসাবে চিহ্নিত করেছে এবং তারপরে এটিকে স্থানীয় রেপো থেকে সরিয়ে দেয়।
পাইগো

134

এটি আপনার জন্য একটি <ফাইল>> আনস্টেজ করা উচিত (ফাইল সরিয়ে বা অন্যথায় পরিবর্তন না করে):

git reset <file>

6
এটি নির্দিষ্ট ফাইলটির সর্বশেষ পরিবর্তন সরিয়ে দেয় তবে কমিট এবং ধাক্কা দেওয়ার পরে এটি রেপোতে (রিমোট) রেখে দেয়।
পাউডার366

1
এই উত্তরটি আমি খুঁজছিলাম। নোট করুন যে আপনাকে নির্দিষ্ট করতে হবে না HEAD
মাইকেল ডারস্ট

ভাল পয়েন্ট @ মিশেলডোরস্ট। আমি উত্তর বাদ দিতে আপডেট করেছি HEAD!
ডেভিড আন্ডারহিল

3
git reset HEAD <file> 

সূচী থেকে একটি নির্দিষ্ট ফাইল সরানোর জন্য।

এবং

git reset HEAD

সমস্ত ইনডেক্সড ফাইল সরানোর জন্য।


1

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

কেবল জিইউআই-ভিত্তিক সরঞ্জামগুলি ব্যবহার করুন যা সূচক পরিচালনার পক্ষে সহায়তা করে, উদাহরণস্বরূপ:

  • git gui <- টি উইন্ডোং কাঠামো ব্যবহার করে - অনুরূপ স্টাইল to gitk
  • git cola <- আরও আধুনিক শৈলীর জিইউআই ইন্টারফেস

এটি আপনাকে পয়েন্ট-ও-ক্লিক করে সূচিগুলির মধ্যে এবং বাইরে ফাইলগুলি সরিয়ে দেয়। এমনকি সূচীতে এবং থেকে কোনও ফাইলের পৃথক অংশ (পৃথক পরিবর্তন) নির্বাচন এবং সরানোর জন্য তাদের সমর্থন রয়েছে।


কীভাবে একটি ভিন্ন দৃষ্টিকোণ সম্পর্কে: আপনি প্রস্তাবিতগুলির পরিবর্তে ক্রিপ্টিক কমান্ডগুলির একটি ব্যবহার করার সময় যদি গোলযোগ করেন তবে:

  • git rm --cached [file]
  • git reset HEAD <file>

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


সূচক ছাড়াই কাজ করা Working

মন্তব্য এবং ভোটের ভিত্তিতে, আমি বুঝতে পেরেছি যে প্রচুর লোকেরা সর্বদা সূচক ব্যবহার করে। আমি না। এখানে কীভাবে:

  • আমার সম্পূর্ণ কাজের অনুলিপি (আদর্শ ক্ষেত্রে) প্রতিশ্রুতিবদ্ধ করুন: git commit -a
  • কয়েকটি ফাইল প্রতিশ্রুতিবদ্ধ: git commit (list of files)
  • কয়েকটি সংশোধিত ফাইল ব্যতীত সমস্ত কমিট করুন: git commit -aতারপরে সংশোধন করুন করুনgit gui
  • কাজের অনুলিপিতে সমস্ত পরিবর্তনগুলি গ্রাফিক্যালি পর্যালোচনা করুন: git difftool --dir-diff --tool=meld

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

আমার ব্যবহারের ঘটনাটি খুব সংকীর্ণ এবং প্রকৃতই অকেজো ছিল: একটি শাখা তৈরি করুন; কেবল শাখার জন্য ফাইলগুলিতে পূর্ণ ফোল্ডার যুক্ত করুন; মাস্টার স্যুইচ করুন; একত্রিত করা; ওপস, মাস্টারে ভুল ফোল্ডার যুক্ত করেছে, এটি গিটিগনরে যুক্ত করুন; ফাইলগুলি প্রতিশ্রুতিবদ্ধ থেকে সরিয়ে দেওয়া হবে না - মঞ্জুর করা, এর থেকে আরও ভাল সমাধান rmসরাসরি ব্যবহার করা হবে তবে আমি প্রথমে ভেবেছিলাম শাখা স্যুইচ করা উপেক্ষা করা ফোল্ডারটিকে হত্যা করবে না । তবে ... আমি গিথুব "গুঁই ভিত্তিক" সরঞ্জামটি ব্যবহার করি যা আমার পক্ষে যথেষ্ট ভাল এবং এটি কোনও সমর্থন না করে কিছু সূচি পরিচালনার পক্ষে সমর্থন করে। তাহলে কী, আমি সরু ব্যবহারের জন্য 2 টি গুই ব্যবহার করব? এখনও উত্তরের সাথে একমত হতে পারে না।
ক্রেগক্স

3
এটি একটি সিদ্ধান্তযুক্ত অপ্রিয় উত্তর। যাইহোক, আমি নিশ্চিত যে আমার প্রস্তাবিত পদ্ধতিটি কিছু লোকের জন্য সঠিক (আমার অন্তর্ভুক্ত) is আমি প্রতি বছর কয়েকবার সূচকে হস্তক্ষেপ করতে এই সরঞ্জামগুলির মধ্যে একটি ব্যবহার করি।
নোবার

1
আজকাল প্রোগ্রামিং সম্পাদক এবং আইডিই সম্ভবত গ্রাফিকাল ইনডেক্স ম্যানিপুলেশন সমর্থন করে। অন্তত গিটহাবের এটম করে।
নোবার

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