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




version-control git-commit (20)

Git কল্পনাযোগ্য প্রতিটি কর্মের জন্য কমান্ড আছে, তবে সঠিক জিনিসগুলি পেতে ব্যাপক জ্ঞান প্রয়োজন এবং এর ফলে এটি সেরা-পাল্টা-জ্ঞানীয় ...

আপনি আগে কি করেছেন:

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

তুমি কি চাও:

  • সূচী থেকে ফাইল সরান, কিন্তু এটি সংস্করণ রাখা এবং কাজ অনুলিপি মধ্যে অসামান্য পরিবর্তন সঙ্গে বামে:

    git reset head <file>
    
  • HEAD থেকে শেষ অবস্থাতে ফাইলটি পুনরায় সেট করুন, পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনুন এবং সূচী থেকে তাদের সরান:

    # 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 থেকে প্রয়োজন হয় - git reset --hard HEAD একক ফাইলের সাথে কাজ করবে না।

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

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

    git rm <file>
    

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

git add myfile.txt

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

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


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

কিন্তু:

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

কেবল,

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

এখন তুমি পার

git unadd foo.txt bar.txt

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

$> git --version
git version 1.6.2.1

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

git reset HEAD .

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


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

git reset <file>

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

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

git reset

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

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

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


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


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

git status

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

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

আমি git এই মত পরিস্থিতিতে সঠিক জিনিস আমাকে nudging একটি চমত্কার ভাল কাজ করে না।

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

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

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

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 reset *

চালান

git gui

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


তুমি চাও:

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 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 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 rm --cached FILE

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


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

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

ইত্যাদি


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

git help rm

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

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

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

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

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


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

git reset HEAD filename.txt

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

git add -p 

ফাইল অংশ যোগ করতে।


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

git reset filename


git reset filename.txt

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


git reset filename.txt  

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





git-stage