আমি কীভাবে মঞ্চ অঞ্চল থেকে কোনও একক ফাইল সরিয়ে ফেলব (গিট অ্যাডটি পূর্বাবস্থায় আনুন)?


1229

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

প্রশ্ন: স্টেজিং এরিয়া থেকে আমি এই ফাইলগুলির মধ্যে একটিটিকে কীভাবে সরিয়ে ফেলব তবে এটি সূচক থেকে সরিয়ে ফেলব না বা নিজেই ফাইলটির পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনব না?


40
উপস্থাপনকারী এলাকা হয় সূচক তাই সম্ভবত আপনি ঠিক নির্মল পারে আপনি কি বলতে চাইছেন?
সিবি বেইলি


উত্তর:


1901

যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনি কেবল git addসেই ফাইলটির জন্য যে কাজটি করেছিলেন তা "পূর্বাবস্থাপন" করতে চান ।

আপনার যদি মঞ্চ অঞ্চল থেকে কোনও একক ফাইল সরানোর প্রয়োজন হয় তবে ব্যবহার করুন

git reset HEAD -- <file>

আপনার যদি মঞ্চ অঞ্চল থেকে একটি সম্পূর্ণ ডিরেক্টরি (ফোল্ডার) অপসারণ করতে হয়, ব্যবহার করুন

git reset HEAD -- <directoryName>

আপনার পরিবর্তনগুলি রাখা হবে। আপনি যখন চালনা git statusকরবেন ফাইলটি আবারও পরিবর্তিত হিসাবে প্রদর্শিত হবে তবে এখনও মঞ্চস্থ হয়নি।

বিশদ জন্য git resetম্যান পৃষ্ঠা দেখুন ।


41
ধন্যবাদ ... আমি সবেমাত্র লক্ষ্য করেছি যে এটি স্টেজযুক্ত ফাইলগুলির ঠিক উপরে লেখা আছে। অনুমান করুন যে আমি এতক্ষণ পর্দার দিকে তাকিয়ে ছিলাম আমি যা বেছে নিতে চেয়েছিলাম তা বেছে বেছে বেছে নিচ্ছি।
0-09

2
এটি আমার সমস্ত পরিবর্তন আনস্টেজ করে, আমি যে কোনও জায়গায় (ম্যান পেজ, এখানে, বন্ধুবান্ধব এবং সি) পেয়েছি এমন প্রতিটি পরামর্শের বিপরীতে। আমি কোনও দিন ভাবতে থাকি এটি বিজ্ঞাপন করা যা করতে চলেছে, তবে তা নয়।
রেকটিড

6
রেপোতে কোনও প্রতিশ্রুতি না দেওয়া থাকাকালীন ফাইলগুলি মঞ্চ থেকে সরানোর উপায় আছে কি?
জ্যারেড ফোর্সথ

3
আমি এই প্রশ্নে আসতে এবং আসা চালিয়ে যাচ্ছি। আমি কেন এটি আরও বার upvote করতে পারি না? :)
পুস

3
@ জারেড ফোরসিথ মঞ্চ থেকে কখনও কমিট করা ফাইল অপসারণ করতে git rm --cached FILEঅন্য উত্তরের পরামর্শ অনুসারে কমান্ডটি ব্যবহার করুন ।
chmike

150
git rm --cached FILE

,

git rm -r --cached CVS */CVS

28
সত্য, তবে git resetএখানে ব্যবহার করা ভাল বলে আমি মনে করি, আপনি --chached বিকল্পটি বাদ দিতে পারেন এবং git rmকমান্ডটি ব্যবহার করে দ্রুত দুঃখ পেতে পারেন :-) git resetআপনি নিরাপদ পাশে রয়েছেন, যদি আপনি "কিছু বিকল্প" যুক্ত করতে ভুলে যান তবে এটি হবে পরিবর্তনটি রাখুন যাতে এটি প্রতিদিনের ব্যবহারের জন্য "নিরাপদ" (আমি কথা বলছি git reset --hard)।
কনরাড 'কোটো' মালাউস্কি

20
আপনার পূর্ববর্তী কমিট না থাকলে এই পদ্ধতিটি কার্যকর।
সোমকিটস

2
git rm --cached FILEওয়ার্কিং ট্রি রূপে ফাইল মোছা ছাড়াই ফাইল মোছার পর্যায়ে। এটি প্রশ্নের পূর্বে ভিন্ন, যা পূর্বাবস্থায় ফেলার বিষয়ে ছিল git add
সাম্পো স্মোল্যান্ডার

1
আপনি যদি ওয়ার্কিং ট্রি থেকে ফাইলটি মুছে ফেলে থাকেন তবে এই উত্তরটি একটি ত্রুটি ফেলে।
স্যামুয়েল রবার্ট

3
git rm --cachedসূচী থেকে ফাইলটি সরানোর কারণ ঘটবে, অর্থাত ফাইলটি অচিহ্নযুক্ত ফাইল হয়ে যাবে । আমি মনে করি না ওপি এটিই চায়। : দয়া করে একটি সংশ্লিষ্ট থ্রেড এখানে দেখতে stackoverflow.com/questions/45047810/...
smwikipedia

88

git reset <file>

আপনার কোনও পূর্ববর্তী কমিট আছে কি না তা কাজ করে।


53

সুতরাং, টিম হেনিগানের জবাবের জন্য সামান্য কিছুটা টুইট: ফাইলের নামের আগে আপনাকে ব্যবহার করা দরকার। এটি দেখতে এটি দেখতে হবে:

git reset HEAD -- <file>

6
কী করে --এবং কেন এটি যুক্ত করে? আমি করেছি git reset HEAD <file>এবং এটি কাজ করে।
পাওলো

15
--এক ধরণের বিভাজক। ফাইলের নামটি প্রচলিত যেমন উদাহরণস্বরূপ ( -fবা master) গিট ফাইলের নামের পরিবর্তে কমান্ড লাইন আর্গুমেন্ট বা শাখার নাম হিসাবে ব্যাখ্যা করবে। এখানে দেখুন
অ্যান্ড্রু

3
এটি আমার পক্ষে কাজ করেছে যেখানে কমান্ড ব্যতীত - সেই ফাইলটির জন্য পূর্বের কোন কমিট না থাকার কারণে হয়নি did ধন্যবাদ।
ম্যাট

17
git reset filename.txt

আপনার যদি filename.txt এ পরিবর্তন হয় তবে আপনি এটিকে ভুলক্রমে মঞ্চে যুক্ত করেছিলেন এবং আপনি ফাইলটি মঞ্চ থেকে সরাতে চান তবে আপনি পরিবর্তনগুলি হারাতে চান না।


6

আপনি যদি কেবল আপনার ফাইলে পরিবর্তনের একটি উপসেট সরাতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

git reset -p

অথবা

git reset -p <file_name>

এই কমান্ডটি মূলত এর বিপরীত git add -p: এটি কেবল মঞ্চ অঞ্চল থেকে নির্বাচিত পরিবর্তনগুলি সরিয়ে ফেলবে। আমি ভুলভাবে আমি যুক্ত করে এমন কিছু "আনডেডিং" করতে এটি অত্যন্ত দরকারী বলে মনে করি।


4

আপনি যদি কোনও নির্দিষ্ট প্যাটার্ন অনুসরণ করে ফাইলগুলি সরাতে চান এবং আপনি ব্যবহার করছেন তবে git rm --cachedআপনি ফাইল-গ্লোব নিদর্শনগুলিও ব্যবহার করতে পারেন।

এখানে দেখুন ।


2

তুমি চাও:

  • একটি একক ফাইলের উপর প্রভাব ফেলবে

  • মঞ্চ অঞ্চল থেকে ফাইল সরান

  • সূচী থেকে একক ফাইল সরান না

  • পরিবর্তন নিজেই পূর্বাবস্থায় ফেরাবেন না

এবং সমাধান হয়

git reset HEAD file_name.ext

অথবা

git reset HEAD path/to/file/file_name.ext

2

আপনি যখন করবেন git status, গিট আপনাকে কীভাবে আনস্টেজ করতে হবে তা বলে:

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

তাই git reset HEAD <file>আমার পক্ষে কাজ করেছে এবং পরিবর্তনগুলি ছোঁয়াচে ছিল।


2

আমি মনে করি আপনি সম্ভবত সূচকের ধারণার সাথে বিভ্রান্ত হয়ে পড়েছেন , যেমনটি @ সিবি বেইলি মন্তব্য করেছেন:

মঞ্চ অঞ্চলটি সূচক।

আপনি কেবল বিবেচনা করতে পারেন ডিরেক্টরি নাটক মঞ্চস্থ এবং সূচক একই জিনিস হিসাবে।
সুতরাং, ঠিক @ টিম হেনিগানের জবাবের মতো , আমার ধারণা:

আপনি কেবল git addসেই ফাইলটির জন্য "পূর্বাবস্থায় ফিরে যেতে" চান ।



আমার উত্তর এখানে:

সাধারণত, মঞ্চের ক্রিয়াকলাপটি পূর্বাবস্থায় ফেলার দুটি উপায় রয়েছে , যেমন ইতিমধ্যে উল্লিখিত অন্যান্য উত্তরগুলি:

git reset HEAD <file>

এবং

git rm --cached <file>

তবে পার্থক্য কী?

ধরুন ফাইলটি মঞ্চস্থ হয়েছে এবং কার্যক্ষম ডিরেক্টরিতেও বিদ্যমান রয়েছে , git rm --cached <file>আপনি যদি স্টেজিং ডিরেক্টরি থেকে এটি সরিয়ে রাখতে চান এবং ফাইলটি কার্যক্ষম ডিরেক্টরিতে রাখতে চান তবে ব্যবহার করুন । কিন্তু লক্ষ্য করা যে এই অপারেশন শুধুমাত্র ফাইল থেকে মুছে ফেলা হবে না পরীক্ষামূলক ডিরেক্টরি হিসাবেই নয় চিহ্নিত ফাইল deletedমধ্যে ডিরেক্টরি নাটক মঞ্চস্থ , যদি আপনি ব্যবহার

git status

এই অপারেশনের পরে, আপনি এটি দেখতে পাবেন:

        deleted:    <file>

এটি স্টেজিং ডিরেক্টরি থেকে ফাইল সরানোর রেকর্ড । আপনি যদি এই রেকর্ডটি রাখতে না চান এবং কেবল কোনও ফাইলের পূর্ববর্তী পর্যায়ে অপারেশনটি পূর্বাবস্থায় ফিরিয়ে নিতে চান তবে git reset HEAD <file>পরিবর্তে ব্যবহার করুন।


-------- উত্তর শেষ --------

PS: আমি উল্লেখ করা কিছু উত্তর লক্ষ্য করেছি:

git checkout -- <file>

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


2

সংস্করণের পরে 2.23, গিট git restoreকমান্ডটি চালু করেছে যা আপনি এটি করতে ব্যবহার করতে পারেন। অফিসিয়াল ডকুমেন্টেশন উদ্ধৃত:

একটি পুনরুদ্ধার উত্স থেকে কিছু সামগ্রী সহ কার্যকারী গাছের নির্দিষ্ট পাথগুলি পুনরুদ্ধার করুন। যদি কোনও পাথ ট্র্যাক করা হয় তবে পুনরুদ্ধার উত্সটিতে উপস্থিত না থাকলে উত্সটির সাথে মেলে এটি সরিয়ে দেওয়া হবে।

কমান্ডটি সূচকে থাকা সামগ্রীর সাথে পুনঃস্থাপন করতে --staged, বা কার্যক্ষম গাছ এবং সূচক উভয়ই পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে --staged --worktree

সুতরাং আপনি git restore --staged <path>ফাইলটি চালু করতে এবং আনস্টেজ করতে পারবেন তবে আপনার করা পরিবর্তনগুলিও রাখতে পারেন। মনে রাখবেন যে ফাইলটি মঞ্চস্থ না করা হলে আপনি এতে করা সমস্ত পরিবর্তন হারাবেন।


1

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

git add .

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

না এটা একগুচ্ছ করছেন আদর্শ

git add path/to/file1 path/to/file2

যদি আপনার অনেক নেস্টেড ডিরেক্টরি থাকে (যা বেশিরভাগ প্রকল্পের ক্ষেত্রে হয়) - বিরক্তিকর হয়

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

Ctrl+U (উইন্ডোজ জন্য)

তাদের আনস্টেজ করতে।


1

গীতের নতুন সংস্করণগুলির জন্য রয়েছে git restore --staged <file>

আমি যখন git statusগিট সংস্করণ দিয়ে একটি করি 2.26.2.windows.1এটি আনস্টেজ করার জন্যও সুপারিশ করা হয়:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

( এই পোস্টটি দেখায়, আগের সংস্করণে git reset HEADএই সময়ে সুপারিশ করা হয়েছিল)

আমি অত্যন্ত সুপারিশ করতে পারে এই পোস্টে মধ্যে পার্থক্য ব্যাখ্যা git revert, git restoreএবং git resetএবং জন্য অতিরিক্তি প্যারামিটার git restore


0

আমার নমুনা:

$ git status
On branch feature/wildfire/VNL-425-update-wrong-translation
Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged,
and have 4 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   ShopBack/Source/Date+Extension.swift
    modified:   ShopBack/Source/InboxData.swift
    modified:   ShopBack/en.lproj/Localizable.strings

আপনি খেয়াল করতে পারেন

> Changes to be committed:
>       (use "git reset HEAD <file>..." to unstage)

-1

আপনাকে ফাইলের ডিরেক্টরিতে থাকতে হবে এবং তারপরে টার্মিনালটিতে নিম্নলিখিত টাইপ করতে হবে

git reset HEAD .

অনুমান হ'ল আপনাকে কেবল একটি ফাইল পুনরায় সেট করতে হবে।



-10

git checkout -- <file>

স্টেজিং এরিয়া থেকে ফাইলগুলি সরাতে এটি পুরোপুরি কাজ করে


4
নীচে উল্লিখিত হিসাবে, এটি ফাইলে পরিবর্তিত হয়, যা ওপি যেতে চায় না তার চেয়ে আরও এক ধাপ এগিয়ে যায়।
stolli

git rm flie.txt --cached
হুয়ান রামিরেজ

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