git - কিভাবে আগে 'গিট অ্যাড' পূর্বাবস্থায় ফেরাতে হবে?



version-control git-commit git-stage (25)

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

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)

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

git add myfile.txt

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

এখন পর্যন্ত 48 টি উত্তর আছে (কিছু মুছে ফেলা হয়েছে)। আপনার নতুন কিছু না থাকলে নতুন এক যোগ করবেন না।


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

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

ইত্যাদি


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

কিন্তু:

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

কেবল,

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

এখন তুমি পার

git unadd foo.txt bar.txt

ধরুন আমি একটি নতুন ফাইল newFile.txt তৈরি করি।

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

এখন আমি এই Add পূর্বাবস্থায় ফিরিয়ে আনতে চাই, commit করার আগে, git reset newFile.txt


তুমি চাও:

git rm --cached <added_file_to_undo>

রিজনিং:

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

git reset .

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

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

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

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

    ... দ্বারা বিষ্ঠা স্ক্রোল প্রচুর ...

    => অবাক, আমি যে সব যোগ করতে চাই না।

  5. google "undo git add"

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

  6. git reset .

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

এটি আরও সক্রিয় করে যে মেইলিং লিস্টে এটির অসহায়ত্বের বিরুদ্ধে একটি ত্রুটি রয়েছে

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

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

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

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

--cached কেবলমাত্র সূচক থেকে পথগুলি সরাতে এবং সরানোর জন্য এই বিকল্পটি ব্যবহার করুন। কাজ গাছ ফাইল, সংশোধন বা না, বাকি থাকবে।

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

git rm --cached .

সবকিছু মুছে ফেলুন এবং আবার শুরু করুন। যদিও কাজ না, কারণ যখন add . recursive হয়, rm প্রয়োজন সক্রিয় -r recurs। দীর্ঘশ্বাস.

git rm -r --cached .

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

git add -n .

--cached ধ্বংস না করে (এবং যদি আমি এটি বানান ভুল করি) সম্পর্কে --cached git help rm বিশ্বাস করার আগে আমি সবকিছু নিরাপদে --cached


git rm --cached . -r

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


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

$> git --version
git version 1.6.2.1

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

git reset HEAD .

এই আপনি খুঁজছেন কি হতে হবে।


স্টেজিং এলাকা থেকে (এবং শুধুমাত্র একটি নতুন ফাইলের ক্ষেত্রে) নতুন ফাইলগুলি সরাতে, যেমন প্রস্তাবিত:

git rm --cached FILE

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


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

  1. স্টেজিং এলাকায় একটি নতুন ফাইল যোগ করা, তারপর git rm --cached file সঙ্গে পূর্বাবস্থায় git rm --cached file
  2. স্টেজিং এলাকায় একটি সংশোধিত ফাইল যোগ, তারপর git reset HEAD file সঙ্গে পূর্বাবস্থায় ফেরা।

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

git reset HEAD file

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

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

ফাইলটি একটি নতুন ফাইল বা সংশোধন করা হলে 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

গিট যোগ ব্যবহার পূর্বাবস্থায় ফিরিয়ে আনুন

git reset filename


git reset filename.txt  

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


গ্রহনযোগ্য উত্তরের একটি সংযোজন, যদি আপনার ভুলভাবে যোগ করা ফাইলটি বিশাল ছিল তবে আপনি সম্ভবত লক্ষ্য করবেন যে, এটি ' 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 ক্যাশে বর্তমান সামগ্রী (স্ন্যাপশট, সংস্করণ) সংরক্ষণ করে। জিআইটি-এ, এই ক্রিয়াটি এখনো যোগ করা হয় , (এটি কেবলমাত্র আপডেট নয়), কারণ একটি ফাইলের দুটি ভিন্ন সংস্করণ (স্ন্যাপশট) দুটি পৃথক আইটেম হিসাবে গণ্য করা হয়: অতএব, আমরা প্রকৃতপক্ষে ক্যাশে একটি নতুন আইটেম যোগ করছি পরে commited।

এই আলোকে, প্রশ্ন সামান্য দ্বিধান্বিত হয়:

আমি ভুলভাবে কমান্ড ব্যবহার করে ফাইল যোগ করা ...

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

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

কিন্তু দুটি ক্যাভিট আছে।

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

দ্বিতীয়ত: জিট git reset HEAD যাদুকরভাবে পূর্বে ক্যাশেড ফাইল সামগ্রী পুনরুদ্ধার করতে পারে না তা সচেতন থাকুন, এটি কেবল 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 lost irrevocably "version 2"
-version 1
+version 3

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

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


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


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


SourceTree এ আপনি GUI এর মাধ্যমে সহজে এটি করতে পারেন। আপনি কোন ফাইলটিকে অস্টেজ করার জন্য sourcetree ব্যবহার করে তা পরীক্ষা করতে পারেন।

আমি একটি নতুন ফাইল তৈরি এবং জিট এটি যোগ করা। তারপর আমি SourceTree Gui ব্যবহার করে এটি unstaged। এই ফলাফল:

Unstaging ফাইল [08/12/15 10:43]
git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = sourcetree reset -q - path / to / file / filename.java

SourceTree resetনতুন ফাইল unstage ব্যবহার করে।


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

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

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

  • জিট রিসেট।
  • জিট চেকআউট।

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


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

git help rm

আপনি প্রতিশ্রুতি আগে git add পূর্বাবস্থায় ফেরাতে পারেন

git reset <file>

যা অন্য কিছু পরিবর্তন না করে বর্তমান সূচী থেকে ("প্রায় প্রতিশ্রুতিবদ্ধ" তালিকা থেকে) সরিয়ে দেবে।

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

git reset

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

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

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


চালান

git gui

এবং ম্যানুয়াল সমস্ত ফাইল ম্যানুয়ালি বা তাদের সব নির্বাচন করে এবং কমিট বাটন থেকে unstage ক্লিক করে মুছে ফেলুন।


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

এই প্রক্রিয়া স্টেজিং বলা হয়। সুতরাং পরিবর্তনগুলি (পরিবর্তিত ফাইল) পর্যায়ক্রমে সর্বাধিক প্রাকৃতিক কমান্ডটি হল:

git stage

git add git stage জন্য 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

ব্যক্তিগতভাবে আমি এমনকি ছোট aliases ব্যবহার:

git a #for staging
git u #for unstaging

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

  • আপনার নতুন প্রকল্পের জন্য প্রধান ডিরেক্টরি তৈরি করুন।
  • git init চালানো চালান।
  • এখন একটি। Gitignore ফাইল তৈরি করুন (এমনকি যদি এটি খালি)।
  • আপনার। জিটিগনোর ফাইল Commit।

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

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

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

আমি অবাক হচ্ছি যে কেউ ইন্টারেক্টিভ মোড উল্লেখ করে না:

git add -i

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

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

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


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

git reset HEAD myfile.txt

ব্যাখ্যা করা:

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

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


git reset filename.txt

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


সহজ উপায় untracked ফাইল অপসারণ

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

git add --all
git reset --hard HEAD




git version-control git-commit git-stage