কমিট করার আগে আমি কীভাবে 'গিট অ্যাড' পূর্বাবস্থায় ফেলি?


8951

কমান্ডটি ব্যবহার করে আমি ভুল করে গিতে ফাইল যুক্ত করেছি:

git add myfile.txt

আমি এখনও চালানো হয়নি git commit। এটিকে পূর্বাবস্থায় ফেলার কোনও উপায় আছে, তাই এই ফাইলগুলি প্রতিশ্রুতিতে অন্তর্ভুক্ত করা হবে না?


22
গীত v1.8.4 থেকে শুরু করে ব্যবহারের জন্য নিচের সব উত্তর HEADবা headএখন ব্যবহার করতে পারেন @স্থানে HEADপরিবর্তে। আপনি কেন এটি করতে পারেন তা জানতে এই উত্তরটি (শেষ বিভাগ) দেখুন ।

3
: আমি একটু গ্রীষ্মের যা কোনো ফাইল unstage সব উপায়ে দেখায় প্রণীত stackoverflow.com/questions/6919121/...
ড্যানিয়েল এল্ডযার

5
গিট চেকআউট কেন নয়?
এরিক রিপেন

13
@ এরিকরেপেন git checkoutকমিট ইনডেক্স থেকে পর্যায়ক্রমে পরিবর্তনগুলি সরিয়ে দেয় না। এটি কেবল সর্বশেষ প্রতিশ্রুতিবদ্ধ সংশোধনীতে অ-পর্যায়ক্রমিক পরিবর্তনগুলিকে পরিবর্তিত করে - যা আমি যা চাই তা নয়, আমি সেই পরিবর্তনগুলি চাই, আমি কেবল পরবর্তী প্রতিশ্রুতিতে তাদের চাই।
paxos1977

4
আপনি যদি Eclipse ব্যবহার করেন তবে কমিট ডায়লগ বাক্সে ফাইলগুলি পরীক্ষা করা যতটা সহজ
হামজাহফ্রাক

উত্তর:


10352

git addকমিট করার আগে আপনি পূর্বাবস্থায় ফিরে যেতে পারেন

git reset <file>

যা এটিকে বর্তমান সূচি ("প্রতিশ্রুতিবদ্ধ হতে হবে" তালিকা থেকে অন্য কোনও পরিবর্তন না করেই সরিয়ে ফেলবে)।

তুমি ব্যবহার করতে পার

git reset

কোনও ফাইল নাম ছাড়াই সমস্ত কারণে পরিবর্তন আনস্টেজ করা। যুক্তিসঙ্গত সময়ে একের পর এক অনেকগুলি ফাইল তালিকাভুক্ত করার জন্য এটি ব্যবহার করতে পারে।

গিটের পুরানো সংস্করণগুলিতে উপরের কমান্ডগুলি সমান git reset HEAD <file>git reset HEAD যথাক্রমে এবং যথাযথ এবং অপরিবর্তিত থাকলে HEAD( যদি আপনি এখনও আপনার ভান্ডারে কোনও কমিট করেন নি) বা অস্পষ্ট (কারণ আপনি একটি শাখা তৈরি করেছেন HEADযা একটি বোকা জিনিস) যা আপনার করা উচিত নয়)। এটি গিট ১.৮.২ এ পরিবর্তিত হয়েছিল , যদিও গিটের আধুনিক সংস্করণগুলিতে আপনি প্রথম প্রতিশ্রুতি দেওয়ার আগে উপরের কমান্ডগুলি ব্যবহার করতে পারেন:

"গিট রিসেট" (বিকল্পগুলি বা প্যারামিটার ব্যতীত) যখন আপনার ইতিহাসে কোনও কমিট না থাকে তখন ত্রুটিযুক্ত হয়ে পড়েছিল, তবে এটি এখন আপনাকে একটি খালি সূচি দেয় (অস্তিত্বহীন প্রতিশ্রুতি মেলাতে আপনি এমনকি নেই)।


92
অবশ্যই, এটি সত্যিকারের পূর্বাবস্থায় নয়, কারণ যদি git addভুলটি পূর্ববর্তী পর্যায়ের অনাকাঙ্ক্ষিত সংস্করণটিকে ওভাররोट করে তবে আমরা এটি পুনরুদ্ধার করতে পারি না। আমি নীচে আমার উত্তরে এটি স্পষ্ট করার চেষ্টা করেছি।
লিওনব্লয়

7
git reset HEAD *.extextপ্রদত্ত এক্সটেনশনের ফাইলগুলি যেখানে আপনি আনড করতে চান। আমার জন্য এটি ছিল *.bmp&*.zip
boulder_ruby

18
@ জনি, সূচক (ওরফে স্টেজিং এরিয়া) সমস্ত ফাইল ধারণ করে, কেবল পরিবর্তিত ফাইল নয়। এটি "জীবন শুরু করে" (যখন আপনি কোনও প্রতিশ্রুতি পরীক্ষা করেন বা কোনও রেপো ক্লোন করেন) HEAD দ্বারা নির্দেশিত প্রতিশ্রুতিযুক্ত সমস্ত ফাইলের অনুলিপি হিসাবে। সুতরাং আপনি যদি সূচী ( ) থেকে কোনও ফাইল সরিয়ে থাকেনgit rm --cached তবে এর অর্থ আপনি সেই প্রতিশ্রুতি তৈরির জন্য প্রস্তুত হচ্ছেন যা সেই ফাইলটিকে মুছে দেয়। git reset HEAD <filename>অন্যদিকে, এইচআইডিএড থেকে সূচীতে ফাইলটি অনুলিপি করা হবে, যাতে পরবর্তী প্রতিশ্রুতিবদ্ধ হওয়া ফাইলটিতে কোনও পরিবর্তন দেখা যাচ্ছে না।
ওয়াইল্ডকার্ড

11
আমি সবেমাত্র আবিষ্কার করেছি যে একটি git reset -pমত আছে git add -p। এটা সত্যিই দারুন!
ডনকুইক্সোট

10
আপনি প্রকৃতপক্ষে পূর্বে মঞ্চায়িত ও আপত্তিজনক পরিবর্তনগুলি পুনরুদ্ধার করতে পারবেন তবে ব্যবহারকারীর বন্ধুরূপে নয় এবং 100% সুরক্ষিত নয় (অন্তত আমি খুঁজে পাইনি): গেগো .git / অবজেক্টস, git addআপনি পুনরুদ্ধার করতে চাইলে তৈরি ফাইলগুলির সন্ধান করুন ( 61/3AF3...- > অবজেক্ট আইডি 613AF3...), তারপরে git cat-file -p <object-id>(বেশ কয়েক ঘন্টা কাজের পুনরুদ্ধার করার পক্ষে এটি আরও উপযুক্ত হতে পারে তবে আরও প্রায়ই করা একটি পাঠও হতে পারে ...)
পিটার স্নাইডার

2151

তুমি চাও:

git rm --cached <added_file_to_undo>

রিজনিং:

আমি যখন এটিতে নতুন ছিলাম, আমি প্রথমে চেষ্টা করেছি

git reset .

(আমার সম্পূর্ণ প্রাথমিক যোগটি পূর্বাবস্থায় ফেলার জন্য), কেবল এটির (তেমন নয়) সহায়ক বার্তাটি পেতে:

fatal: Failed to resolve 'HEAD' as a valid ref.

দেখা যাচ্ছে যে প্রথম প্রতিশ্রুতি না হওয়া পর্যন্ত HEAD রেফ (শাখা?) অস্তিত্বের কারণেই এটি নয়। এটি হ'ল, আপনি আমার মতো একই শিক্ষানবিস সমস্যাটিতে চলে যাবেন যদি আপনার ওয়ার্কফ্লো আমার মতো কিছু ছিল:

  1. গিট, নতুন হটনেস চেষ্টা করে দেখতে আমার দুর্দান্ত নতুন প্রকল্প ডিরেক্টরিতে সিডি করুন
  2. git init
  3. git add .
  4. git status

    ... এর দ্বারা প্রচুর ক্রেপ স্ক্রোল ...

    => জঘন্য, আমি এটি সব যোগ করতে চাই না।

  5. গুগল "গিট অ্যাডু পূর্বাবস্থা"

    => স্ট্যাক ওভারফ্লো - হ্যাঁ

  6. git reset .

    => মারাত্মক: 'HEAD' বৈধ রেফ হিসাবে সমাধান করতে ব্যর্থ।

এটি আরও সক্রিয় যে একটি বাগ লগ আছে মেইলিং তালিকায় এর অপ্রয়োজনীয়তার বিরুদ্ধে ।

এবং এটি হ'ল গিট স্ট্যাটাস আউটপুটে সঠিক সমাধানটি ছিল (যা হ্যাঁ, আমি 'ক্রেপ হিসাবে দেখলাম)

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...

এবং সমাধান প্রকৃতপক্ষে ব্যবহার করা হয় git rm --cached FILE

এখানে অন্য কোথাও সতর্কতাগুলি নোট করুন - git rmফাইলটির স্থানীয় ওয়ার্কিং কপিটি মুছুন , তবে আপনি যদি - ক্যাশেড ব্যবহার করেন তবে তা নয় । এর ফলাফল এখানে :git help rm

--cched এই তালিকাটি কেবল সূচি থেকে আনস্টেজ করতে এবং সরানোর জন্য এই বিকল্পটি ব্যবহার করুন। ওয়ার্ক ট্রি ট্রিগুলি, পরিবর্তিত হোক বা না থাকুক, বাকি থাকবে।

আমি ব্যবহার এগিয়ে

git rm --cached .

সবকিছু সরিয়ে আবার শুরু করতে। যদিও কাজ হয়নি, কারণ add .পুনরাবৃত্ত হওয়ার পরেও পুনরাবৃত্তি হওয়া rmদরকার -r। দীর্ঘশ্বাস.

git rm -r --cached .

ঠিক আছে, এখন আমি যেখানে শুরু করেছি সেখানে ফিরে এসেছি। পরবর্তী সময় আমি -nএকটি শুকনো রান করতে ব্যবহার করতে যাচ্ছি এবং দেখুন কী যুক্ত হবে:

git add -n .

কোনও কিছু ধ্বংস না করার git help rmবিষয়ে বিশ্বাস করার আগে আমি সমস্ত কিছু নিরাপদ স্থানে জিপ করে দিয়েছি --cached(এবং যদি আমি এটির বানান বানান তবে কী হবে)।


15
Hah। আমি এই একই প্রক্রিয়া অনুসরণ করেছি। আমি হাল ছেড়ে দিয়ে বলেছিলাম rm -rf .git, git initকারণ আমি git rm --cachedআমার কাজের অনুলিপি রাখতে বিশ্বাস করি না । এটি কিছু জায়গায় গিট কীভাবে অতিরিক্ত জটিল হয় তার জন্য এটি একটু বলে says git unstageকেবল একটি স্টক স্ট্যান্ডার্ড কমান্ড হওয়া উচিত, আমি এটি একটি উপন্যাস হিসাবে যুক্ত করতে পারি কিনা সেদিকে খেয়াল নেই।
অ্যাড্রিয়ান ম্যাকনিল

5
আমার জন্য গিট বলেছেনgit reset HEAD <File>...
ড্রেনার

16
গিট আরএম - ক্যাচড <ফাইল> প্রকৃতপক্ষে সঠিক উত্তর, যদি এটি <file> এর প্রাথমিক আমদানি সংগ্রহস্থলের মধ্যে থাকে। আপনি যদি ফাইলটিতে পরিবর্তন আনস্টেজ করার চেষ্টা করছেন, গিট রিসেট হ'ল সঠিক উত্তর। লোকেরা বলছে যে এই উত্তরটি ভুল, তারা একটি আলাদা প্রশ্নের কথা ভাবছে।
ব্যারি কেলি

14
এটি আসলে কাজ করবে, তবে কেবলমাত্র প্রথম প্রতিশ্রুতিতে, যেখানে ফাইলটির আগে উপস্থিত ছিল না, বা যেখানে git addকমান্ড নতুন ফাইল যুক্ত করেছিল, কিন্তু বিদ্যমান ফাইলগুলিতে পরিবর্তন ঘটেনি ।
nnot101

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

532

আপনি যদি টাইপ করেন:

git status

গিট আপনাকে কীভাবে মঞ্চস্থ করা হয় ইত্যাদি জানিয়ে দেবে, কীভাবে আনস্টেজ করা যায় সে সম্পর্কে নির্দেশাবলী সহ:

use "git reset HEAD <file>..." to unstage

আমি দেখতে পাই যে গিট আমাকে এই জাতীয় পরিস্থিতিতে সঠিক কাজ করতে টিপতে বেশ ভাল কাজ করে।

দ্রষ্টব্য: সাম্প্রতিক গিট সংস্করণ (1.8.4.x) এই বার্তাটি পরিবর্তন করেছে:

(use "git rm --cached <file>..." to unstage)

19
addএডি ফাইলটি ইতিমধ্যে ট্র্যাক করা হয়েছে কিনা তার উপর নির্ভর করে বার্তাটি আলাদা হবে ( addকেবলমাত্র ক্যাশে একটি নতুন সংস্করণ সংরক্ষণ করা হয়েছে - এখানে এটি আপনার বার্তাটি প্রদর্শন করবে)। অন্য কোথাও, ফাইলটি আগে মঞ্চস্থ না হলে এটি প্রদর্শিত হবেuse "git rm --cached <file>..." to unstage
লিওনব্লায়

গ্রেট! আপনি কেবল git reset HEAD <file>একটি ফাইল মুছে ফেলা আনস্টেজ করতে চান এমন ক্ষেত্রে একমাত্র কাজ করবে
Skerit

2
আমার গিট সংস্করণটি 2.14.3 স্টেস্টেজ করতে বলে git reset HEAD
সিলভার ওল্ফ - মনিকা

246

স্পষ্ট করার জন্য: git addবর্তমান ওয়ার্কিং ডিরেক্টরি থেকে পরিবর্তনগুলি স্টেজিং এরিয়া (সূচক) এ স্থানান্তরিত করে ।

এই প্রক্রিয়াটিকে স্টেজিং বলা হয় । সুতরাং পরিবর্তনগুলি (পরিবর্তিত ফাইল) পর্যায়ক্রমে সবচেয়ে প্রাকৃতিক আদেশ হ'ল সুস্পষ্ট:

git stage

git add এর জন্য কেবল একটি সহজ-প্রকারের উপাধি git stage

করুণা নেই git unstageবা git unaddআদেশও নেই। প্রাসঙ্গিকটি অনুমান করা বা মনে রাখা শক্ত, তবে এটি বেশ সুস্পষ্ট:

git reset HEAD --

আমরা সহজেই এর জন্য একটি উপকরণ তৈরি করতে পারি:

git config --global alias.unadd 'reset HEAD --'
git config --global alias.unstage 'reset HEAD --'

এবং সবশেষে, আমাদের কাছে নতুন কমান্ড রয়েছে:

git add file1
git stage file2
git unadd file2
git unstage file1

ব্যক্তিগতভাবে আমি এমনকি আরও ছোট সংকেতগুলি ব্যবহার করি:

git a # For staging
git u # For unstaging

3
"প্যাচসমূহ"? এটি নির্দেশিত হবে এটি কার্যকারী ডিরেক্টরি থেকে চলে গেছে। বিষয়টি তেমন নয়।
টমাস ওয়েলার

4
এটা প্রকট কেন?
লেনার হোয়েট

প্রকৃতপক্ষে, গিট এবং অন্যান্য এসসিএম উভয়েরই git stageজন্য git add, যা alias তিহাসিক কমান্ডের জন্য উপনাম ,। এটি যদি আমি বলতে পারি, তবে "গিটের গিট সংগ্রহস্থল" এর প্রতিশ্রুতি দিয়ে 11920d28da এর সাথে ২০০৮ সালের ডিসেম্বরে এটি যুক্ত করা হয়েছে।
ওবিসিডিয়ান

1
এটি সম্পর্কিত হতে পারে না, তবে আমি দরকারী ধারণা যুক্ত হওয়ার আগে ফাইলটি যাচাই করে দেখলাম, চেক-কমান্ড ফাইলের নাম এবং & git অ্যাড ফাইলনামের মতো, আমি আমার মেশিনে একটি সংক্ষিপ্ত জি দিয়ে গিটকে প্রতিস্থাপন করেছি এবং এখন পর্যন্ত এটি কাজ করেছে আমার জন্য ঠিক আছে: github.com/dataf3l/g , আমি জানি না এটি কারওর পক্ষে কার্যকর হবে কিনা তবে আমি কিছু আশা করে এটি এখানে রেখে দেব some
ফিলিপ ভাল্ডেস

167

গৃহীত উত্তরের সাথে একটি অতিরিক্ত যোগ করুন, যদি আপনার ভুলভাবে যুক্ত হওয়া ফাইলটি বিশাল ছিল তবে আপনি সম্ভবত লক্ষ্য করবেন যে, ' git reset' এর সাহায্যে সূচক থেকে অপসারণ করার পরেও এটি .gitডিরেক্টরিতে স্থান দখল করে আছে বলে মনে হচ্ছে ।

এটি নিয়ে উদ্বিগ্ন হওয়ার কিছু নেই; ফাইলটি প্রকৃতপক্ষে সংগ্রহস্থলের মধ্যে রয়েছে তবে কেবল একটি "লুজ অবজেক্ট" হিসাবে রয়েছে। এটি অন্য সংগ্রহস্থলগুলিতে অনুলিপি করা হবে না (ক্লোন, ধাক্কা দিয়ে) এবং স্থানটি শেষ পর্যন্ত পুনরায় দাবি করা হবে - যদিও খুব শীঘ্রই নয়। আপনি যদি উদ্বিগ্ন হন তবে আপনি চালাতে পারেন:

git gc --prune=now

আপডেট (এরপরে যা কিছু উত্সাহিত উত্তর থেকে উদ্ভূত হতে পারে এমন কিছু বিভ্রান্তি পরিষ্কার করার আমার প্রচেষ্টা):

সুতরাং, যা বাস্তব হয় পূর্বাবস্থা এর git add?

git reset HEAD <file> ?

অথবা

git rm --cached <file>?

কড়া কথা বলতে, এবং যদি আমি ভুল না হয়: কিছুই না

git add পূর্বাবস্থায় ফেরানো যাবে না - নিরাপদে, সাধারণভাবে।

আসুন প্রথমে স্মরণ করি আসুন git add <file>আসলে কী করে:

  1. যদি <file>হয় পূর্বে ট্র্যাক করা হয়নি , git add ক্যাশে সেটিকে যোগ করে , তার বর্তমান কন্টেন্ট সঙ্গে।

  2. যদি <file>হয় ইতিমধ্যে ট্র্যাক , git add বর্তমান সামগ্রী সংরক্ষণ ক্যাশে করার জন্য (স্ন্যাপশট, সংস্করণ)। গিট-এ, এই ক্রিয়াটিকে এখনও অ্যাড বলা হয় (কেবল এটি আপডেট নয়) কারণ কোনও ফাইলের দুটি পৃথক সংস্করণ (স্ন্যাপশট) দুটি পৃথক আইটেম হিসাবে বিবেচিত হয়: সুতরাং, আমরা প্রকৃতপক্ষে ক্যাশে একটি নতুন আইটেম যুক্ত করছি, শেষ পর্যন্ত পরে প্রতিশ্রুতিবদ্ধ।

এর আলোকে প্রশ্নটি কিছুটা অস্পষ্ট:

কমান্ডটি ব্যবহার করে আমি ভুল করে ফাইল যুক্ত করেছি ...

ওপি'র দৃশ্যমানটি প্রথমটি (চিহ্নবিহীন ফাইল) বলে মনে হচ্ছে, আমরা ট্র্যাকড আইটেমগুলি থেকে ফাইলটি (কেবলমাত্র বর্তমান সামগ্রীগুলি নয়) সরিয়ে ফেলার জন্য "পূর্বাবস্থায় ফিরে যেতে" চাই। যদি এটি হয় তবে চালানো ঠিক হবে git rm --cached <file>

এবং আমরা চালাতে পারে git reset HEAD <file>। এটি সাধারণভাবে পছন্দনীয়, কারণ এটি উভয় পরিস্থিতিতেই কাজ করে: যখন আমরা ইতিমধ্যে ট্র্যাক করা আইটেমটির কোনও সংস্করণ ভুলভাবে সংযোজন করি তখন এটি পূর্বাবস্থায় ফিরে আসে।

তবে দুটি ক্যাভেট রয়েছে।

প্রথম: (উত্তরে বর্ণিত হিসাবে) কেবলমাত্র একটি দৃশ্য রয়েছে যা git reset HEADকাজ করে না, তবে git rm --cachedতা করে: একটি নতুন সংগ্রহশালা (কোনও অঙ্গীকার নেই)। কিন্তু, সত্যই, এটি একটি ব্যবহারিকভাবে অপ্রাসঙ্গিক কেস।

দ্বিতীয়: সচেতন হন যে git reset HEAD পূর্বে ক্যাশেড ফাইলের সামগ্রীগুলি যাদুকরীভাবে পুনরুদ্ধার করতে পারে না, এটি কেবল এটি হেড থেকে পুনরায় সংশ্লেষিত করে। যদি আমাদের বিভ্রান্ত হয়git add কোনও পূর্ববর্তী মঞ্চস্থ অননুমোদিত সংস্করণটি ওভাররোট করে, আমরা এটি পুনরুদ্ধার করতে পারি না। এই কারণেই, কঠোরভাবে বলতে গেলে, আমরা [*] কে পূর্বাবস্থায় ফিরিয়ে আনতে পারি না।

উদাহরণ:

$ git init
$ echo "version 1" > file.txt
$ git add file.txt   # First add of file.txt
$ git commit -m 'first commit'
$ echo "version 2" > file.txt
$ git add  file.txt   # Stage (don't commit) "version 2" of file.txt
$ git diff --cached file.txt
-version 1
+version 2
$ echo "version 3" > file.txt
$ git diff  file.txt
-version 2
+version 3
$ git add  file.txt    # Oops we didn't mean this
$ git reset HEAD file.txt  # Undo?
$ git diff --cached file.txt  # No dif, of course. stage == HEAD
$ git diff file.txt   # We have irrevocably lost "version 2"
-version 1
+version 3

অবশ্যই, এটি খুব সমালোচিত নয় যদি আমরা কেবলমাত্র 'নতুন' ফাইল (কেস 1) যুক্ত করার জন্য 'গিট অ্যাড' করার স্বাভাবিক অলস কর্মপ্রবাহটি অনুসরণ করি এবং আমরা কমিট, git commit -aকমান্ডের মাধ্যমে নতুন বিষয়বস্তু আপডেট করি ।


* (সম্পাদনা করুন: উপরেরটি ব্যবহারিকভাবে সঠিক, তবে এখনও পর্যায়ক্রমে পরিবর্তনগুলি পুনরুদ্ধার করার জন্য কিছুটা হ্যাকিশ / কনভোল্টেড উপায় থাকতে পারে তবে প্রতিশ্রুতিবদ্ধ নয় এবং তারপরে ওভাররাইট করা হয়েছে - জোহানেস ম্যাটোকিক এবং আইলসমিটের মন্তব্য দেখুন)


4
কঠোরভাবে বলতে গেলে ইতিমধ্যে একটি স্টেজেড ফাইলটি পুনরুদ্ধার করার একটি উপায় রয়েছে যা গিট অ্যাড দিয়ে প্রতিস্থাপন করা হয়েছিল। যেমন আপনি উল্লেখ করেছেন গিট অ্যাড সেই ফাইলটির জন্য একটি গিট অবজেক্ট তৈরি করে যা কেবলমাত্র ফাইলটিকে পুরোপুরি সরানোর সময় নয়, নতুন সামগ্রীতে ওভাররাইট করা অবস্থায়ও একটি আলগা বস্তুতে পরিণত হবে। তবে এটি স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করার কোনও আদেশ নেই। পরিবর্তে ফাইলটি সনাক্ত করতে হবে এবং ম্যানুয়ালি বা কেবল এই ক্ষেত্রে লিখিত সরঞ্জামগুলি দিয়ে বের করতে হবে (libgit2 এটিকে অনুমতি দেবে)। তবে এটি কেবল তখনই প্রদান করা হবে যদি ফাইলটি খুব গুরুত্বপূর্ণ এবং বড় হয় এবং পূর্ববর্তী সংস্করণটি সম্পাদনা করে পুনর্নির্মাণ করা যায় না।
জোহানেস ম্যাটোকিক

2
নিজেকে সংশোধন করার জন্য: একবার আলগা বস্তু ফাইলটি পাওয়া গেলে (তৈরির তারিখ / সময়ের মতো মেটা-ডেটা ব্যবহার করুন) git cat-fileএর সামগ্রী পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে।
জোহানেস ম্যাটোকিক

2
আরেকটি উপায় যে পরিবর্তন মঞ্চস্থ হয়েছে কিন্তু দায়বদ্ধ নয় এবং তারপর ওভাররাইট পুনরুদ্ধার অন্য যেমন দ্বারা git addমারফত git fsck --unreachableযে সব অনধিগম্য obj, যা আপনি তারপর পরিদর্শন করতে পারেন তালিকা প্রস্তুত করা যাবে git show SHA-1_IDবা git fsck --lost-foundযে ইচ্ছা> লিখন মধ্যে বস্তু আনত .git/lost-found/commit/বা .git/lost-found/other/টাইপ উপর নির্ভর করে। আরও দেখুনgit fsck --help
আইলসমিট

110

পূর্বাবস্থায় ফিরুনইতোমধ্যে যুক্ত করা একটি ফাইল গিট ব্যবহার করা বেশ সহজ। পুনরায় সেট করার জন্য myfile.txt, যা ইতিমধ্যে যুক্ত করা হয়েছে, ব্যবহার করুন:

git reset HEAD myfile.txt

ব্যাখ্যা:

পূর্বাবস্থায় ফেরাতে আপনি অযাচিত ফাইল (গুলি) করার পরে আপনি তা করতে পারেন git resetHeadস্থানীয় আপনার ফাইলের প্রধান এবং শেষ পরামিতিটি আপনার ফাইলের নাম।

এই ক্ষেত্রে ঘটতে পারে এমন সমস্ত পদক্ষেপ সহ আমি আপনার জন্য আরও বিশদে নীচে চিত্রের পদক্ষেপগুলি তৈরি করেছি:

গিট রিসেট হেড ফাইল


চিত্র: "কমান্ড যোগ করুন ...""কমান্ড যোগ করা ..." ( সাধারন বর্তমান কাল, তৃতীয় ব্যক্তি )
পিটার মর্টেনসেন

চিত্র: চাইকরতে চান (সেখানে ব্যবহার অপভাষা করার কোন প্রয়োজন এখানে)
পিটার মর্টেনসেন

92
git rm --cached . -r

আপনি আপনার বর্তমান ডিরেক্টরি থেকে পুনরাবৃত্তভাবে যোগ করেছেন এমন সমস্ত কিছু "আন-অ্যাড" করবে


3
আমি কেবলমাত্র একটি নির্দিষ্ট ফাইল, সমস্ত কিছু যুক্ত করতে চাইছিলাম না।
paxos1977

3
আপনার যদি পূর্ববর্তী কোনও কমিট না থাকে তবে এটি সহায়ক। পূর্ববর্তী প্রতিশ্রুতি না থাকলে, git reset HEAD <file>বলতেনfatal: Failed to resolve 'HEAD' as a valid ref.
প্রিয়া রঞ্জন সিং

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

88

চালান

git gui

এবং ম্যানুয়ালি বা সমস্ত ফাইল নির্বাচন করে এবং কমিট বোতাম থেকে স্টেপ স্টেজে ক্লিক করে সমস্ত ফাইল সরান ।


1
হ্যাঁ আমি এটা বুঝতে পারি। আমি কেবল সুস্পষ্টভাবে বলতে চেয়েছিলাম যে আপনার নির্দেশিত git-gui
নির্দেশটি

1
এটি বলে, "গিট-গুই: কমান্ড পাওয়া যায় নি"। আমি নিশ্চিত না এটি কাজ করে কিনা।
পরিিন্দা রাজাপক্ষ

বাহ, এটি কমান্ড লাইনগুলি করার পরে যা আপনি বুঝতে পারেন নি তা বেশ সহজ। এটি অবশ্যই আমার মতো একজন নবজাতকের জন্য প্রস্তাবিত। এই পর্যন্ত লেখার জন্য ধন্যবাদ!
ইরফ্যান্ডি জিপ

ধন্যবাদ। এটি ঝুঁকিপূর্ণ করতে চায়নি তাই GUI ব্যবহার করতে হবে।
সাগর খাত্রি

83

গিটের প্রতিটি কার্য কল্পনার জন্য আদেশ রয়েছে, তবে জিনিসগুলি সঠিকভাবে পেতে এটিকে বিস্তৃত জ্ঞানের প্রয়োজন এবং এটি সর্বোপরি স্ব-স্বজ্ঞাত ...

আপনি এর আগে যা করেছেন:

  • একটি ফাইল পরিবর্তন এবং ব্যবহার করা হয়েছে git add ., বা git add <file>

তুমি কি চাও:

  • সূচী থেকে ফাইলটি সরিয়ে ফেলুন, তবে এটির সংস্করণে রাখুন এবং কার্যকরী অনুলিপিতে অনির্দিষ্ট পরিবর্তনের সাথে রেখে দিন:

    git reset head <file>
    
  • পরিবর্তনগুলি পূর্বাবস্থায়িত করে সূচি থেকে অপসারণ করে, হেড থেকে শেষ অবস্থায় ফাইলটি পুনরায় সেট করুন:

    # Think `svn revert <file>` IIRC.
    git reset HEAD <file>
    git checkout <file>
    
    # If you have a `<branch>` named like `<file>`, use:
    git checkout -- <file>

    git reset --hard HEADএকক ফাইল নিয়ে কাজ করবে না বলে এটি প্রয়োজন ।

  • <file>কাজের অনুলিপি পরিবর্তনের সাথে আন সংস্করণযুক্ত ফাইল রেখে সূচি এবং সংস্করণ থেকে সরান :

    git rm --cached <file>
    
  • <file>কাজের অনুলিপি এবং সংস্করণ সম্পূর্ণরূপে সরান :

    git rm <file>
    

1
আমি 'গিট রিসেট হেড <ফাইল>' এবং 'গিট আরএম - ক্যাচড <ফাইল> এর পার্থক্যের তুলনায় দাঁড়াতে পারি না। আপনি এটা ব্যাখ্যা করতে পারেন?
জেসওয়ং

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

3
পার্থক্যটি git reset HEAD <file>অস্থায়ী - কমান্ডটি কেবলমাত্র পরবর্তী প্রতিশ্রুতিতে প্রয়োগ করা git rm --cached <file>হবে , তবে এটি পুনরায় যোগ করার পরে অব্যাহত রাখবে git add <file>। এছাড়াও, এর git rm --cached <file>অর্থ , আপনি যদি সেই শাখাটিকে দূরবর্তী স্থানে ঠেলে দেন তবে যে কেউ শাখাটি টানছেন তারা প্রকৃতপক্ষে ফাইলটি তাদের ফোল্ডার থেকে মুছে ফেলা হবে।
অঙ্কিত

80

প্রশ্নটি পরিষ্কারভাবে উত্থাপিত হয় না। কারণটির git addদুটি অর্থ রয়েছে:

  1. মঞ্চ অঞ্চলে একটি নতুন ফাইল যুক্ত করুন , তারপরে পূর্বাবস্থায় ফিরে যান git rm --cached file
  2. মঞ্চ এলাকায় একটি পরিবর্তিত ফাইল যুক্ত করুন, তারপরে পূর্বাবস্থায় ফিরে যান git reset HEAD file

সন্দেহ হলে ব্যবহার করুন

git reset HEAD file

কারণ এটি উভয় ক্ষেত্রেই প্রত্যাশিত কাজটি করে।

সতর্কতা: আপনি যদি git rm --cached fileএমন কোনও ফাইলে করেন যা সংশোধিত হয়েছিল (একটি ফাইল যা रिपোজিটরিতে আগে উপস্থিত ছিল) তবে ফাইলটি সরানো হবে git commit! এটি এখনও আপনার ফাইল সিস্টেমে বিদ্যমান থাকবে, তবে অন্য কেউ যদি আপনার প্রতিশ্রুতি টানেন, ফাইলটি তাদের কাজের গাছ থেকে মুছে ফেলা হবে।

git statusফাইলটি কোনও নতুন ফাইল বা পরিবর্তিত ছিল কিনা তা আপনাকে বলবে :

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

    new file:   my_new_file.txt
    modified:   my_modified_file.txt

7
+1 টি। এই পৃষ্ঠায় একটি অসাধারণ সংখ্যক উচ্চ-উত্সাহিত উত্তর এবং মন্তব্যগুলি এর আচরণ সম্পর্কে কেবল ফ্ল্যাট-আউট ভুল git rm --cached somefile। আমি আশা করি এই উত্তরটি পৃষ্ঠাটি একটি বিশিষ্ট অবস্থানে পৌঁছেছে যেখানে এটি নতুনদের সকল মিথ্যা দাবি দ্বারা বিভ্রান্ত হওয়ার হাত থেকে রক্ষা করতে পারে।
মার্ক আমেরিকা

এখানে সেরা উত্তরগুলির মধ্যে একটি, দু: খজনকভাবে এটি তালিকায় খুব কম
ক্রিওস

64

আপনি যদি প্রাথমিক প্রতিশ্রুতিতে থাকেন এবং আপনি ব্যবহার করতে না পারেন তবে git resetকেবল "গিট দেউলিয়া" ঘোষণা করুন এবং .gitফোল্ডারটি মুছুন এবং আবার শুরু করুন


5
একটি টিপ হ'ল যদি আপনি ফোল্ডারটি মোছার আগে দূরবর্তী উত্স যোগ করেছেন তবে আপনার .git / কনফিগারেশন ফাইলটি অনুলিপি করুন।
টিয়াগো

4
@ ক্রিস জোনসেন মন্তব্যটি স্পট করেছেন। কখনও কখনও, আপনি একটি ব্যতীত সমস্ত ফাইল প্রতিশ্রুতিবদ্ধ করতে চান: git add -A && git rm --cached EXCLUDEFILE && git commit -m 'awesome commit' (কোনও পূর্ববর্তী প্রতিশ্রুতি না থাকলে এটি আবারও কাজ করে, Failed to resolve 'HEAD'সমস্যা হয়)

57

অন্যান্য উত্তরগুলির অনেকগুলি হিসাবে আপনি ব্যবহার করতে পারেন git reset

কিন্তু:

আমি এই দুর্দান্ত পোষ্টটি পেয়েছি যা আসলে গিট কমান্ডটি (ভাল, একটি উপনাম) যুক্ত করেছে git unadd: বিবরণের জন্য গিট আনডড দেখুন বা ..

কেবল,

git config --global alias.unadd "reset HEAD"

এখন তুমি পার

git unadd foo.txt bar.txt

45

git add -iআপনার আসন্ন প্রতিশ্রুতি থেকে সবেমাত্র যুক্ত ফাইলগুলি সরাতে ব্যবহার করুন । উদাহরণ:

আপনি চান না এমন ফাইল যুক্ত করা হচ্ছে:

$ git add foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]#

আপনার যুক্তটিকে পূর্বাবস্থায় ফিরিয়ে আনতে ইন্টারেক্টিভ অ্যাডে যান (এখানে গিটে টাইপ করা কমান্ডগুলি হ'ল "r" (রিভার্ট), "1" (তালিকার প্রত্যাবর্তনের তালিকার প্রথম এন্ট্রি)), 'রিটার্ট' মোড থেকে বাদ দিতে 'এবং' q ' (প্রস্থান করার):

$ git add -i
           staged     unstaged path
  1:        +1/-0      nothing foo

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +1/-0      nothing [f]oo
Revert>> 1
           staged     unstaged path
* 1:        +1/-0      nothing [f]oo
Revert>> 
note: foo is untracked now.
reverted one path

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> q
Bye.
$

এটাই! আপনার প্রমাণটি এখানে দেখানো হচ্ছে যে "ফু" "চিহ্নবিহীন তালিকায় ফিরে এসেছে:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$

42

git removeঅথবা পতাকা git rmসহ --cachedএটির জন্য ব্যবহার করা যেতে পারে । চেষ্টা করুন:

git help rm

9
এটি কি পুরোপুরি ফাইলটি সরিয়ে দেবে না?
উইলা

8
git rm --cached ...গিট রেপো থেকে ফাইলগুলি সরিয়ে ফেলবে। সেগুলি আপনার কম্পিউটারে এখনও বিদ্যমান থাকবে তবে এটি কোনও ফাইলে আনস্টেজ করা পরিবর্তন থেকে একেবারেই আলাদা । যে কেউ এ নিয়ে হোঁচট খাচ্ছে, এটি প্রশ্নের বৈধ উত্তর নয়।
অ্যাডিসন

38

আপনি যখন নতুন প্রকল্প শুরু করবেন তখন এই ভেক্সিং সমস্যাটি এড়াতে এখানে একটি উপায়:

  • আপনার নতুন প্রকল্পের জন্য প্রধান ডিরেক্টরি তৈরি করুন।
  • চালান git init
  • এখন একটি .gitignore ফাইল তৈরি করুন (এটি খালি থাকলেও)।
  • আপনার .gitignore ফাইলটি প্রতিশ্রুতিবদ্ধ।

গিট আপনার git resetযদি কোন কমিট না করে থাকে তা করা সত্যিই কঠিন করে তোলে । যদি আপনি কেবল একটি করার জন্য একটি ক্ষুদ্র প্রাথমিক প্রতিশ্রুতি তৈরি করেন, তার পরে আপনি git add -Aএবং এটি করতে পারেনgit reset অনেক বার হিসাবে হিসাবে আপনি সবকিছু অধিকার পেতে চাই।

এই পদ্ধতির আর একটি সুবিধা হ'ল যদি আপনি পরে লাইন-এন্ডিং সমস্যার মধ্যে পড়ে এবং আপনার সমস্ত ফাইল রিফ্রেশ করার প্রয়োজন হয় তবে এটি সহজ:

  • প্রাথমিক প্রতিশ্রুতি পরীক্ষা করে দেখুন। এটি আপনার সমস্ত ফাইল সরিয়ে ফেলবে।
  • তারপরে আপনার সাম্প্রতিক প্রতিশ্রুতি আবার দেখুন। এটি আপনার বর্তমান লাইন-শেষের সেটিংস ব্যবহার করে আপনার ফাইলগুলির নতুন কপিগুলি পুনরুদ্ধার করবে।

1
নিশ্চিত হয়েছে! গিট অ্যাডের পরে গিট রিসেট করার চেষ্টা করুন। এবং গিট দুর্নীতিগ্রস্থ হেড সম্পর্কে অভিযোগ করছিল। আপনার পরামর্শ অনুসরণ করে, আমি কোনও সমস্যা ছাড়াই পিছনে পিছনে যোগ করতে এবং পুনরায় সেট করতে পারি :)
কাউনাভি

1
দ্বিতীয় অংশটি কাজ করে তবে এটি কিছুটা আনাড়ি। লাইনের সমাপ্তিগুলি কীভাবে পরিচালনা করা হয়, autocrlfমানের উপর নির্ভর করে ... সেটিংসের উপর নির্ভর করে এটি প্রতিটি প্রকল্পে কাজ করবে না।
sjas

1
এই উত্তরটি পোস্ট হওয়ার সময়ে যুক্তিসঙ্গত ছিল, তবে এখন এটি অপ্রচলিত; git reset somefileএবং git resetউভয়ই এখন প্রথম কমিট করার আগে কাজ করে। বেশ কয়েকটি গিট রিলিজ হওয়ার পর থেকে এটি ঘটেছে।
মার্ক আমেরিকা 30'15

@ মারক্যামেরি, আপনি ঠিক থাকতে পারেন (আপনি যদি নিজের দৃser়তার জন্য কোনও উত্স পোস্ট করেন তবে এটি দুর্দান্ত হবে), তবে পরিষ্কার রেট বা দু'টি দিয়ে আপনার রেপো শুরুর এখনও মূল্য রয়েছে।
রায়ান লুন্ডি

34

আপনি আপনার প্রশ্ন পোস্ট করার পর থেকে সম্ভবত গিট বিবর্তিত হয়েছে।

$> git --version
git version 1.6.2.1

এখন, আপনি চেষ্টা করতে পারেন:

git reset HEAD .

এটি আপনি যা খুঁজছেন তা হওয়া উচিত।


2
অবশ্যই, তবে তারপরে আপনার কীভাবে দুটি (বা আরও বেশি) ফাইলগুলির মধ্যে একটি যুক্ত করা উচিত তা সম্পর্কে ফলোআপ প্রশ্ন রয়েছে । "গিট রিসেট" ম্যানুয়ালটিতে উল্লেখ করা হয়েছে যে "গিট রিসেট <পাথস>" তবে "গিট অ্যাড <পাথস>" এর বিপরীত।
অ্যালেক্স উত্তর-কী

34

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

git reset <path_to_file>
fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git reset -- <path_to_file>
Unstaged changes after reset:
M    <path_to_file>

(গিট সংস্করণ 1.7.5.4)


2
আমি চেষ্টা করেছি git reset <path>এবং এটি বিভাজক ছাড়া ঠিক কাজ করে। আমি গিট 1.9.0 ব্যবহার করছি। এটি পুরানো সংস্করণে কাজ করে না?

31

উপরের পরামর্শ অনুসারে মঞ্চ অঞ্চল থেকে নতুন ফাইলগুলি সরাতে (এবং কেবলমাত্র একটি নতুন ফাইলের ক্ষেত্রে):

git rm --cached FILE

দুর্ঘটনাক্রমে যুক্ত হওয়া নতুন ফাইলগুলির জন্য আরএম - ক্যাশেড ব্যবহার করুন।


4
মনে রাখবেন যে এটি --cachedএখানে একটি সত্যই গুরুত্বপূর্ণ অংশ।
তাকেশীন

1
-1; না, এটি ফাইলটি আন-স্টেজ করে না, এটি ফাইলটিকে মুছে ফেলার পর্যায়ে ফেলেছে (এটি আসলে আপনার কাজের গাছ থেকে মুছে না ফেলে)।
মার্ক আমেরিকা

25

একটি নির্দিষ্ট ফোল্ডারে (এবং এর সাবফোল্ডার) প্রতিটি ফাইল পুনরায় সেট করতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

git reset *

4
প্রকৃতপক্ষে, এটি প্রতিটি ফাইল পুনরায় সেট করে না কারণ * শেল সম্প্রসারণ ব্যবহার করা হয় এবং এটি ডটফাইল (এবং ডট ডিরেক্টরি) উপেক্ষা করে।
লুক

আপনি git statusযে কোনও কিছু দেখতে দৌড়াতে পারেন এবং এটিকে নিজেই পুনরায় সেট করতে পারেন git reset file
জোড়ায়র

25

*একবারে একাধিক ফাইল পরিচালনা করতে কমান্ডটি ব্যবহার করুন :

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

প্রভৃতি


3
মনে রাখবেন যে * সাধারণত dotfiles অন্তর্ভুক্ত করবে না বা 'ডট ডিরেক্টরি' যদি না আপনি স্পষ্টভাবে উল্লেখ .*বা.*.prj
লুক

23

কেবল টাইপ করুন git resetএটি আবার ফিরে যাবে এবং এটি git add .আপনার শেষ প্রতিশ্রুতি থেকে কখনও টাইপ করেনি। আপনি আগে প্রতিশ্রুতিবদ্ধ হয়েছে তা নিশ্চিত করুন।


যেমনটি ঘটেছিল, সেখানে একটি শেষ প্রতিশ্রুতি ছিল ... তবে আমি বিশেষভাবে প্রতিশ্রুতি থেকে একটি ফাইল মুছে ফেলার বিষয়ে জিজ্ঞাসা করছিলাম, প্রতি ফাইলটি প্রতিশ্রুতি থেকে নয়।
paxos1977

20

মনে করুন আমি একটি নতুন ফাইল তৈরি করেছি newFile.txt:

এখানে চিত্র বিবরণ লিখুন

ধরুন আমি দুর্ঘটনাক্রমে ফাইলটি যুক্ত করেছি git add newFile.txt:

এখানে চিত্র বিবরণ লিখুন

এখন আমি এই যোগটি পূর্বাবস্থায় ফিরিয়ে আনতে চাই, প্রতিশ্রুতি দেওয়ার আগে git reset newFile.txt,:

এখানে চিত্র বিবরণ লিখুন


ধরুন আমি প্রথম ছবিতে এসেছি যার অর্থ আমি এমনকি "git.add" করিনি। এছাড়াও, আমি মোটেও এই সমস্ত পরিবর্তন চাই না। মানে আমি যখন গিট স্ট্যাটাস করি তখন এটি কোনও লাল ফাইল প্রদর্শন করা উচিত নয়। আমি বোঝাতে চাইছি এটি সিঙ্কে হওয়া উচিত যেন শেষ গিট পুশ থেকে কোনও ফাইলই পরিবর্তিত হয়নি। কিভাবে যে অর্জন।
অবিচ্ছেদ্য

সুতরাং ধরুন আপনি প্রথমে ঠিক পদক্ষেপে রয়েছেন। এবং আপনি যে পরিবর্তন করেছেন তা থেকে মুক্তি পেতে চান যা "নতুন ফাইল.টেক্সট" তৈরি করছে যা লাল হিসাবে দেখাবে।
অবিচ্ছেদ্য

আমি যখন গিট স্ট্যাটাস করি আমার কোনও পরিবর্তনই দেখা উচিত নয়। সমস্ত লাল ফাইল ফেরত দেওয়া উচিত।
অবিচ্ছেদ্য

হাই, আমি মনে করি আপনার প্রশ্নটি কীভাবে বর্তমান গাছ থেকে তালা ছাড়ানো ফাইলগুলি সরিয়ে ফেলা যায়। তার জন্য, আপনি "গিট ক্লিন-ফ-ডি" ব্যবহার করতে পারেন। এটি পাশাপাশি তালিকৃত ডিরেক্টরিগুলিও মুছে ফেলবে।
বিদুরা মুদালিগে ২

আপনি যদি তালিকার চিহ্নবিহীন ফাইলগুলি মুছতে না চান তবে "-f" পতাকাটি উপেক্ষা করুন।
বিদুরা মুদালিগে

19

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

  • গিট রিসেট my_file.txt
  • git চেকআউট my_file.txt

সমস্ত যুক্ত ফাইলের জন্য:

  • গিট রিসেট
  • গিট চেকআউট

দ্রষ্টব্য: চেকআউট ফাইলগুলিতে কোড পরিবর্তন করে এবং সর্বশেষ আপডেট (প্রতিশ্রুতিবদ্ধ) অবস্থায় চলে আসে। রিসেট কোড পরিবর্তন করে না; এটি কেবল শিরোনামটি পুনরায় সেট করে।


3
git reset <file>এবং এর মধ্যে পার্থক্য ব্যাখ্যা করুন git checkout <file>
ট্রেন্ট

1
রিসেট ফাইল পরিবর্তন করে না, কেবল স্টেজ থেকে দূরে রাখুন (= সূচক, যেখানে এটি গিট অ্যাড দ্বারা দেওয়া হয়েছিল)
ফ্রাঙ্ক

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

1
পুনরায় সেট করুন = ফাইলটি মঞ্চ থেকে সরান তবে পরিবর্তনগুলি এখনও থাকবে। চেকআউট = সংগ্রহস্থল থেকে আপডেট হওয়া ফাইল পেয়েছে এবং বর্তমান ফাইলটি ওভাররাইড করবে
ইমাম বুक्स

14

এই আদেশটি আপনার পরিবর্তনগুলি আনস্টাশ করে দেবে:

git reset HEAD filename.txt

আপনি ব্যবহার করতে পারেন

git add -p 

ফাইলের অংশ যুক্ত করতে।


14

ইন্টারেক্টিভ মোডটিও রয়েছে:

git add -i

ফাইলগুলি আনতে বিকল্প 3 নির্বাচন করুন। আমার ক্ষেত্রে আমি প্রায়শই একাধিক ফাইল যুক্ত করতে চাই এবং ইন্টারেক্টিভ মোডের সাহায্যে আপনি ফাইলগুলি যুক্ত করতে এই জাতীয় সংখ্যা ব্যবহার করতে পারেন। এটি 4: 1, 2, 3 এবং 5 ব্যতীত সমস্ত কিছুই গ্রহণ করবে

একটি সিকোয়েন্স চয়ন করতে, 1 থেকে 5 পর্যন্ত সমস্ত নিতে কেবল 1-5 টাইপ করুন।

গিট স্টেজিং ফাইল


"আমি অবাক হয়েছি যে কেউ ইন্টারেক্টিভ মোডের কথা উল্লেখ করে না" - তারা করেছে: stackoverflow.com/a/10209776/1709587
মার্ক অ্যামেরি


10
git reset filename.txt

বর্তমান সূচী থেকে ফাইল নাম.txt নামের একটি ফাইল সরিয়ে ফেলবে, "কিছুই প্রতিশ্রুতিবদ্ধ হতে হবে" অঞ্চল, অন্য কোনও পরিবর্তন ছাড়াই।


10

git add myfile.txt # এটি আপনার ফাইলটিকে প্রতিশ্রুতিবদ্ধ তালিকাতে যুক্ত করবে

এই কমান্ডের সম্পূর্ণ বিপরীত,

git reset HEAD myfile.txt  # This will undo it.

সুতরাং, আপনি আগের অবস্থায় থাকবেন। নির্দিষ্ট না করা তালিকার তালিকায় আবার থাকবে (পূর্ববর্তী অবস্থা)।

এটি নির্দিষ্ট ফাইলের সাথে আপনার মাথাটি পুনরায় সেট করবে। সুতরাং, যদি আপনার মাথার অর্থ না থাকে তবে এটি কেবল এটি পুনরায় সেট করবে।


9

সোর্সট্রি-তে আপনি জিইউআইয়ের মাধ্যমে সহজেই এটি করতে পারেন। সোর্সট্রি কোন ফাইলটি আনস্টেজ করার জন্য কোন আদেশটি ব্যবহার করে তা পরীক্ষা করতে পারেন।

আমি একটি নতুন ফাইল তৈরি করে এটিকে গিটে যুক্ত করেছি। তারপরে আমি সোর্সট্রি জিইউআই ব্যবহার করে এটি আনস্টেজ করেছি। এটি ফলাফল:

ফাইলগুলি আনস্টেজ করা হচ্ছে [08/12/15 10:43] git -c diff.mnemonicprefix = মিথ্যা -সি কোর.কোটিপ্যাথ = মিথ্যা -c শংসাপত্র.হেল্পার = উত্সসূত্র পুনরায় সেট করুন -কি - পথ / থেকে / ফাইল / ফাইল নাম.জভা

সোর্সট্রি resetনতুন ফাইলগুলি আনস্টেজ করতে ব্যবহার করে।


হ্যাঁ, সাধারণ ব্যবহারের ক্ষেত্রে গিট কমান্ড পেয়ে একই কৌশল টর্টোজাইজিটের সাথে ব্যবহার করা যেতে পারে ।
পিটার মর্টেনসেন

8
git reset filename.txt  

বর্তমান সূচী থেকে ফাইল নাম.txt নামের একটি ফাইল সরিয়ে ফেলবে, "কিছুই প্রতিশ্রুতিবদ্ধ হতে হবে" অঞ্চল, অন্য কোনও পরিবর্তন ছাড়াই।


Git রিসেট [ফাইল নাম] উদা: Git রিসেট src / প্রধান / জাভা / কম / দাও / ImportCsvDataDaoImpl.java
রোহিত Chaurasiya
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.