git গিটহাব - আমি কিভাবে গিট মধ্যে unstaged পরিবর্তন প্রত্যাখ্যান করবেন?



github (25)

সূচীগুলিতে না থাকা আমার কাজের অনুলিপিগুলিতে আমি কীভাবে পরিবর্তনগুলি অগ্রাহ্য করব?


Answers

আমি কখন এই কমান্ডটি ব্যবহার করব তা ব্যাখ্যা করার জন্য এই নিবন্ধটি সহায়ক খুঁজে পেয়েছি: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

একটি দম্পতি বিভিন্ন ক্ষেত্রে আছে:

  1. যদি আপনি ফাইলটি git checkout তবে আপনি git checkout ব্যবহার করেন। চেকআউট "সূচী সংস্করণ সাথে মেলে ম্যাচিং গাছ আপডেট ফাইল"। ফাইলগুলি যদি সংগঠিত না হয় (আকাঙ্ক্ষায় সূচী যোগ করা হয়েছে) ... এই কমান্ডটি অবশ্যই আপনার শেষ কাজটি কীভাবে ফাইলগুলিকে ফিরিয়ে দেবে।

    git checkout -- foo.txt

  2. যদি আপনি ফাইলটি স্টেজ করে থাকেন তবে জিট রিসেট ব্যবহার করুন। রিসেট একটি কমিট মেলে সূচক পরিবর্তন।

    git reset -- foo.txt

আমি git stash ব্যবহার করে এটি একটি জনপ্রিয় পছন্দ কারণ এটি একটি সামান্য কম বিপজ্জনক। জিট রিসেট ব্যবহার করে আপনি দুর্ঘটনাক্রমে খুব বেশি দূরে আঘাত করলে আপনি এটিতে ফিরে যেতে পারেন। রিসেট ডিফল্ট দ্বারা recursive হয়।

আরও পরামর্শের জন্য উপরের নিবন্ধটি দেখুন।


আপনি কেবল বিদ্যমান ফাইলগুলিতে পরিবর্তনগুলি সরাতে চান তবে checkout ব্যবহার করুন ( https://git-scm.com/docs/git-checkout )।

git checkout -- .
  • কোন শাখা নির্দিষ্ট করা হয়, তাই এটি বর্তমান শাখা চেক আউট।
  • দ্বি-হাইফেন ( -- ) গিটকে বলে যে তার দ্বিতীয় যুক্তি (পথ) হিসাবে অনুসরণ করা উচিত, যাতে আপনি একটি শাখার স্পেসিফিকেশন এড়িয়ে যান।
  • সময়কাল ( . ) সব পথ নির্দেশ করে।

আপনি যদি আপনার শেষ কমিটির পরে যোগ করা ফাইলগুলি সরাতে চান তবে clean ( git-scm.com/docs/git-clean ) ব্যবহার git-scm.com/docs/git-clean :

git clean -i 
  • -i বিকল্প ভুল মুছে ফেলার রোধ করতে একটি ইন্টারেক্টিভ clean শুরু করে।
  • অন্যান্য বিকল্প একটি মুষ্টিযুদ্ধ দ্রুত মৃত্যুদন্ড জন্য উপলব্ধ; ডকুমেন্টেশন দেখুন।

আপনি যদি পরবর্তী অ্যাক্সেসের জন্য কোনও হোল্ডিং স্পেসে পরিবর্তন সরাতে চান তবে stash ব্যবহার করুন ( এখানে নথিভুক্ত ):

git stash
  • সম্ভাব্য পরবর্তী অ্যাক্সেসের জন্য সমস্ত পরিবর্তন Git এর স্ট্যাশে সরানো হবে।
  • বিকল্প একটি মুষ্টিযুদ্ধ আরো nuanced stashing জন্য উপলব্ধ; ডকুমেন্টেশন দেখুন।

এটি বর্তমান ডিরেক্টরির জন্য বর্তমান সূচীটি পরীক্ষা করে, বর্তমান ডিরেক্টরির থেকে ফাইলগুলির মধ্যে সমস্ত পরিবর্তনগুলি নিক্ষেপ করে ফেলে।

git checkout .

অথবা এই সূচী থেকে সব ফাইল চেক আউট, কাজ গাছ ফাইল overwriting।

git checkout-index -a -f

এই কমান্ড ব্যবহার করে এটি করার সবচেয়ে সহজ উপায় হল:

এই কমান্ডটি কাজের ডিরেক্টরি পরিবর্তনগুলি বাতিল করতে ব্যবহৃত হয় -

git checkout -- .

https://git-scm.com/docs/git-checkout

Git কমান্ডে, অপ্রয়োজনীয় ফাইলগুলির স্ট্যাশিং ব্যবহার করে:

git stash -u

http://git-scm.com/docs/git-stash


আমার একটি অদ্ভুত পরিস্থিতি ছিল যেখানে একটি ফাইল সর্বদা অস্থির ছিল, এটি আমাকে সমাধান করতে সহায়তা করে।

গিট আরএম। gitattributes জিট
অ্যাড-এ
গিট রিসেট - হাওয়ার্ড


উপরে সমস্ত সমাধান চেষ্টা করে কিন্তু এখনও নতুন, unstaged ফাইল পরিত্রাণ পেতে পারে না।

git clean -f ব্যবহার করুন - নতুন ফাইল মুছে ফেলার জন্য - যদিও সাবধান! বল বিকল্প লক্ষ্য করুন।


আপনি git স্ট্যাটাস টাইপ করার সময়, ("git checkout - ..." ব্যবহার করে কাজ ডিরেক্টরি পরিবর্তনগুলি বাতিল করতে) দেখানো হয়।

যেমন git checkout -- .


git checkout -f

man git-checkout :

-f, --force

শাখাগুলি স্যুইচ করার সময়, সূচী বা কার্যকরী গাছটি HEAD থেকে পৃথক থাকলেও এগিয়ে যান। এটি স্থানীয় পরিবর্তন নিক্ষেপ করা হয়।

সূচক থেকে পাথ চেক আউট যখন, unmerged এন্ট্রি উপর ব্যর্থ না; পরিবর্তে, unmerged এন্ট্রি উপেক্ষা করা হয়।


আরেকটি দ্রুত উপায় হল:

git stash save --keep-index --include-untracked

আপনি যদি এটি সম্পর্কে পুঙ্খানুপুঙ্খ হতে না চান তবে অন্তর্ভূক্ত --include-untracked অন্তর্ভুক্ত করা দরকার হবে না।

তারপরে, আপনি যদি চান তবে একটি git stash drop কমান্ড দিয়ে যে git stash drop দিতে পারেন।


আপনি আপনার নিজস্ব উপনাম তৈরি করতে পারেন যা বর্ণনামূলকভাবে কীভাবে তা করতে হয়।

আমি পরিবর্তন বাতিল করতে পরবর্তী উল্লিখিত ব্যবহার।

কাজের গাছ (গুলি) ফাইল (গুলি) মধ্যে পরিবর্তন বাতিল করুন

discard = checkout --

তারপরে আপনি সমস্ত পরিবর্তন বাতিল করতে পরবর্তী হিসাবে এটি ব্যবহার করতে পারেন:

discard .

অথবা শুধু একটি ফাইল:

discard filename

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

পরিষ্কার এবং কাজ গাছ পরিবর্তন এবং untracked ফাইল বাতিল

cleanout = !git clean -df && git checkout -- .

তাই ব্যবহার পরবর্তী হিসাবে সহজ:

cleanout

এখন পরবর্তী গীথাব রেপোতে উপলব্ধ রয়েছে যা প্রচুর উপনাম রয়েছে:


Git-clean (ডিফল্ট কিছু ফাইল থেকে পরিত্রাণ পেতে আপনাকে অনুমতি দেবে) থেকে আরো বেশি নির্দিষ্ট নতুন ফাইলগুলি পরিত্রাণ পেতে আরেকটি উপায়, প্রথম সূচীগুলিতে নতুন ফাইল যুক্ত করতে হবে, তারপরে স্ট্যাশ করুন, তারপরে ড্রপ করুন লুকিয়ে।

এই কৌশলটি কার্যকর, কিছু কারণে, আপনি কিছু সাধারণ প্রক্রিয়া (যেমন RM) দ্বারা অনির্ধারিত ফাইলগুলি সহজেই মুছে ফেলতে পারবেন না।


যখন আপনি অন্য কাউকে স্ট্যাশ স্থানান্তরিত করতে চান:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[সম্পাদনা] হিসাবে মন্তব্য, স্ট্যাশ নামকরণ করা সম্ভব। আচ্ছা, যদি আপনি আপনার স্ট্যাশ শেয়ার করতে চান তবে এটি ব্যবহার করুন;)


আপনি যদি অসংরক্ষিত পরিবর্তনগুলি রাখতে আগ্রহী না হন (বিশেষ করে যদি স্টেজ পরিবর্তনগুলি নতুন ফাইল হয়), আমি এই সহজটি খুঁজে পেয়েছি:

git diff | git apply --reverse

আপনি যদি জমা দেওয়ার ক্ষেত্রে এবং কোনও সমাধান না করেন তবে চেষ্টা করুন:

  • সমস্যাটি কি (সম্ভবত একটি "নোংরা" কেস) পরীক্ষা করতে ব্যবহার করুন:

    git diff

  • স্ট্যাশ মুছে ফেলার জন্য

    git submodule update


সমস্ত unstaged ফাইল ব্যবহার করার জন্য:

git checkout -- .

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

git checkout path/to/file/to/revert

শেষে সময়ের অন্তর্ভুক্ত করতে ভুলবেন না।


কোন ব্যাপার আপনার রেপো আপনার মধ্যে কি অবস্থা সবসময় কোনো পূর্ববর্তী কমিট পুনরায় সেট করতে পারেন:

git reset --hard <commit hash>

এই যে প্রতিশ্রুতি পরে তৈরি করা হয়েছিল সব পরিবর্তন বাতিল করা হবে।


আপনি গিট স্ট্যাশ ব্যবহার করতে পারেন - যদি কিছু ভুল হয় তবে আপনি এখনও স্ট্যাশ থেকে ফিরতে পারবেন। এখানে অন্য কিছু উত্তর অনুরূপ, কিন্তু এই এক সব unstaged ফাইল এবং সব unstaged মুছে ফেলা মুছে ফেলা হয়:

git add .
git stash

যদি আপনি সবকিছু ঠিকঠাক চেক করেন তবে স্ট্যাশটি নিক্ষেপ করুন:

git stash drop

বিটল মাকসুদের git clean সাথে আমার git clean আমার জন্য কাজ করেছে, কিন্তু স্ট্যাশের সাথে আমার আরও নিয়ন্ত্রণ আছে - যদি আমি ভুলভাবে আছি তবে আমি এখনও আমার পরিবর্তনগুলি পেতে পারি

হালনাগাদ

আমার মনে হয় আরও 1 টি পরিবর্তন আছে (জানি না কেন এটি আমার আগে কাজ করেছিল):

git add . -A git add . -A পরিবর্তে git add .

-A মুছে ফেলা ফাইল মঞ্চ করা হবে না


শুধু ব্যবহার করুন:

git stash -u

সম্পন্ন. সহজ।

আপনি সত্যিই আপনার স্ট্যাশ স্ট্যাক সম্পর্কে যত্নশীল তারপর আপনি git stash drop সঙ্গে অনুসরণ করতে পারেন। কিন্তু সেই মুহুর্তে আপনি ভাল ব্যবহার করছেন (মারিয়ুস নাওক থেকে):

git checkout -- .
git clean -df

যাইহোক, আমি git stash -u ভাল পছন্দ করি কারণ এটি শুধুমাত্র এক কমান্ডে সমস্ত ট্র্যাকড এবং অট্যাক্টেড পরিবর্তনগুলি "বাতিল করে"। এখনো git checkout -- . শুধুমাত্র ট্র্যাক করা পরিবর্তনগুলিকে বাতিল করে এবং git clean -df শুধুমাত্র বিন্যস্ত পরিবর্তনগুলি বাতিল করে দেয় ... এবং উভয় কমান্ড টাইপ করা অনেক বেশি কাজ করে :)


যেহেতু কোনও উত্তর সঠিক বিকল্প সংমিশ্রণটি আমি ব্যবহার করি না সেগুলি এখানে উল্লেখ করে, এখানে এটি হল:

git clean -dfx
git checkout .

এটি ব্যবহৃত git clean বিকল্পগুলির জন্য অনলাইন সহায়তা পাঠ্য:

-d

অট্যাকড ফাইল ছাড়াও অট্যাকড ডিরেক্টরি সরান। একটি অট্যাক্যাকড ডিরেক্টরি ভিন্ন জিট রিপোজিটরি দ্বারা পরিচালিত হলে, এটি ডিফল্টরূপে সরানো হয় না। যদি আপনি সত্যিই এই ধরনের ডিরেক্টরি মুছে ফেলতে চান তাহলে -f বিকল্পটি দুবার ব্যবহার করুন।

-f

Git কনফিগারেশন পরিবর্তনশীল clean.requireForce যদি false সেট না থাকে তবে clean.requireForce , -n , অথবা -i দেওয়া না থাকলে Git পরিচ্ছন্ন ফাইল বা ডিরেক্টরি মুছে ফেলতে অস্বীকার করবে। .git সাবডিরেক্টরি অথবা ফাইলের মধ্যে ডিরেক্টরি মুছে ফেলতে অস্বীকার করবে, যদি না একটি দ্বিতীয় .git দেওয়া হয়।

-x

.gitignore (প্রতি নির্দেশিকা) এবং $GIT_DIR/info/exclude থেকে উপেক্ষা নিয়মগুলি ব্যবহার করবেন না, তবে এখনও -e বিকল্পগুলির সাথে প্রদত্ত উপেক্ষা নিয়মগুলি ব্যবহার করবেন। এই বিল্ড পণ্য সহ, সমস্ত untracked ফাইল অপসারণ করতে পারবেন। এটি একটি পরিষ্কার বিল্ড পরীক্ষা করার জন্য একটি প্রিজাইন ওয়ার্কিং ডিরেক্টরি তৈরি করতে (সম্ভবত git reset সাথে যুক্ত করে) ব্যবহার করা যেতে পারে।

এছাড়াও, git checkout . repo রুট করা প্রয়োজন।


এটি সম্পূর্ণ সমাধান মত মনে হয়:

git clean -df
git checkout -- .

জিট git-scm.com/docs/git-clean সমস্ত অট্যাকড ফাইলগুলি সরান ( সতর্কতা : এটি। gitignore সরাসরি উল্লিখিত ফাইলগুলিকে মুছে ফেলবে না তবে এটি ফোল্ডারগুলিতে থাকা উপেক্ষা করা ফাইলগুলি মুছে ফেলতে পারে ) এবং git checkout সমস্ত অসংযত পরিবর্তনগুলি সাফ করে।


আপনি যদি একটি রেপোজিটরির ফর্কের সাথে কাজ করেন যেখানে আপনি অনুসরণ করেন তবে অন্য রেপোর সাথে নিয়মিত সিঙ্ক্রোনাইজ করুন (উদাহরণস্বরূপ টানুন)। সংক্ষিপ্ত উত্তর: ফর্ক এবং refork মুছে ফেলুন, কিন্তু github সতর্কবার্তা পড়ুন

আমারও অনুরূপ সমস্যা ছিল, সম্ভবত অভিন্ন নয়, এবং আমি দুঃখিত যে আমার সমাধান আদর্শ নয়, তবে এটি শেষ পর্যন্ত কার্যকর।

আমি প্রায়ই এই মত গিট স্ট্যাটাস বার্তা আছে (কমপক্ষে 2/4 ফাইল জড়িত):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

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

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


সহজভাবে বলুন

git stash

এটি আপনার সমস্ত স্থানীয় পরিবর্তন মুছে ফেলবে। আপনি বলার পরে পরে ব্যবহার করতে পারেন

git stash apply 

বা গিট প্যাচ প্যাচ


cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory

আমার মতে,

git clean -df

কৌতুক করা উচিত। গিট পরিষ্কার উপর গিট ডকুমেন্টেশন অনুযায়ী

জিট-ক্লিন - কাজের গাছ থেকে অপ্রচলিত ফাইল সরান

বিবরণ

বর্তমান ডিরেক্টরি থেকে শুরু করে, সংস্করণ নিয়ন্ত্রণের অধীনে নয় এমন ফাইলগুলি পুনরাবৃত্তিভাবে মুছে ফেলার মাধ্যমে কার্যক্ষেত্রের গাছটি সাফ করে।

সাধারণত, Git এ অজানা ফাইলগুলি সরিয়ে ফেলা হয়, তবে -x বিকল্পটি নির্দিষ্ট করা থাকলে, উপেক্ষা করা ফাইলগুলিও সরিয়ে ফেলা হয়। এটি, উদাহরণস্বরূপ, সমস্ত বিল্ড পণ্যগুলি সরাতে দরকারী হতে পারে।

যদি কোন ঐচ্ছিক ... আর্গুমেন্ট দেওয়া হয়, শুধুমাত্র ঐ পথ প্রভাবিত হয়।

বিকল্প

-d অট্যাকড ফাইল ছাড়াও অট্যাকড ডিরেক্টরি সরান। একটি অট্যাক্যাকড ডিরেক্টরি ভিন্ন জিট রিপোজিটরি দ্বারা পরিচালিত হলে, এটি ডিফল্টরূপে সরানো হয় না। যদি আপনি সত্যিই এই ধরনের ডিরেক্টরি মুছে ফেলতে চান তাহলে -f বিকল্পটি দুবার ব্যবহার করুন।

-f -force যদি গিট কনফিগারেশন পরিবর্তনশীল clean.requireForce মিথ্যাতে সেট না থাকে তবে G-clean, -n, -i বা -i দেওয়া না থাকলে গিট পরিচ্ছন্নতা চালানোর জন্য অস্বীকার করবে।


যদি আপনি কোনও শাখার দিকে নির্দেশ করে একটি শাখাটির নামকরণ করতে চান তবে তা করুন:

git branch -m <oldname> <newname>

আপনি যদি বর্তমান শাখাটির নাম পরিবর্তন করতে চান তবে আপনি এটি করতে পারেন:

git branch -m <newname>

এটি মনে রাখার একটি উপায়, -m হল "চলুন" (বা mv ), যা আপনি ফাইলগুলিকে পুনঃনামকরণ করেন।





git