গিট সংগ্রহস্থলের একাধিক মুছে ফেলা ফাইলগুলি কীভাবে সরিয়ে ফেলা যায়


236

আমি নীচে কিছু ফাইল এবং গিট স্ট্যাটাস শো মুছে ফেলেছি।

আমি প্রতিশ্রুতিবদ্ধ এবং ঠেলাঠেলি করেছি।

গিটহাব এখনও মুছে ফেলা ফাইলগুলি ভান্ডারে দেখায়। আমি কীভাবে গিটহাব সংগ্রহস্থলের ফাইলগুলি মুছতে পারি?

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    modules/welcome/language/english/kaimonokago_lang.php
#   deleted:    modules/welcome/language/french/kaimonokago_lang.php
#   deleted:    modules/welcome/language/german/kaimonokago_lang.php
#   deleted:    modules/welcome/language/norwegian/kaimonokago_lang.php

যদি আমি ব্যবহার git rmকরি তবে এটি নিম্নলিখিতটি দেয়।

usage: git rm [options] [--] <file>...

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched


উত্তর:


637
git add -u 

আপনার সমস্ত পরিবর্তন আপডেট করুন


31
একটি কবজ কাজ করে। যখন আপনি এমন একটি সাধারণ তবুও ঘন ঘন প্রয়োজনের প্রস্তাবিত সমাধান হিসাবে "গিট স্ট্যাটাস | সেড-এন '/ ^ # * মোছা: / এস /// পি' | এক্সগার্স গিট আরএম" এর মতো কিছু দেখেন তবে আপনি আরও ভাল সমাধানটি জানতে পারবেন, বা শীঘ্রই, কোণার কাছাকাছি হবে।
আর্সেল্ডন

সহজ আরও ভাল, এটি "ব্যাশ"
উপায়ের

1
লেখক কীভাবে ফাইলগুলি সরিয়ে ফেলতে চান, কেন ফাইল যুক্ত করা সঠিক উত্তর?
কেলিন

3
@ ক্যালিন: গিট ডকস থেকে ( git-scm.com/docs/git-add ): "-u - আপডেট সূচি আপডেট করুন ঠিক যেখানে এটি ইতিমধ্যে <pathspec> এর সাথে মিলছে। এটি সূচকগুলিকে মুছে ফেলার পাশাপাশি সূচী এন্ট্রিগুলিকেও পরিবর্তন করে কার্যকরী গাছের সাথে মেলে তবে নতুন ফাইল যুক্ত হয় না option -u বিকল্প ব্যবহার করার সময় <pathspec> যদি দেওয়া না হয় তবে পুরো কার্যনির্বাহী গাছের সমস্ত ট্র্যাক করা ফাইল আপডেট করা হয় (বর্তমান ডিরেক্টরিটিতে আপডেট সীমাবদ্ধ করতে গিটের পুরানো সংস্করণ এবং এর উপ-ডিরেক্টরিগুলি)।
হেডমন

92

সম্পর্কে খুব সতর্ক হতে হবে git rm .; এটি আপনার চেয়ে বেশি মুছে ফেলতে পারে। অবশ্যই, আপনি পুনরুদ্ধার করতে পারেন, তবে এটি না করা সহজ is

সবচেয়ে সহজ হবে:

git rm modules/welcome/language/english/kaimonokago_lang.php \
       modules/welcome/language/french/kaimonokago_lang.php \
       modules/welcome/language/german/kaimonokago_lang.php \
       modules/welcome/language/norwegian/kaimonokago_lang.php

আপনি শেল ওয়াইল্ডকার্ডগুলি ব্যবহার করতে পারবেন না কারণ ফাইলগুলি বিদ্যমান নেই তবে আপনি ব্যবহার করতে পারেন (কমপক্ষে ব্যাশে):

git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php

বা বিবেচনা করুন:

git status | sed -n '/^# *deleted:/s///p' | xargs git rm

এটি আউটপুট নেয় git status, ডিফল্ট ( sed -n) দ্বারা কিছু মুদ্রণ করে না , তবে যে লাইনে শুরু হয় # deleted:, এটি থেকে মুক্তি পাওয়া যায় #এবং deleted:যা পড়ে থাকে তা মুদ্রণ করে; xargsআর্গুমেন্ট সংগ্রহ করে এবং তাদের একটি git rmকমান্ড সরবরাহ করে। এটি নামের মধ্যে মিল (বা ভিন্নতা) নির্বিশেষে যে কোনও ফাইলের জন্য কাজ করে।


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

109
git diff --diff-filter=D --name-only -z | xargs -0 git rmপার্স করার চেষ্টা করার চেয়ে একটি নির্ভরযোগ্য পদ্ধতি git statusযা ব্যবহারকারী ভিত্তিক এবং ভবিষ্যতের সংস্করণগুলির তুলনায় স্থিতিশীল হওয়ার গ্যারান্টিযুক্ত নয়।
সিবি বেইলি

@ চার্লস: এটি অবশ্যই আরও ভাল, তবে কী বিকল্পগুলি পাওয়া যায় git diff(যা আমার আগে ছিল না, তার আগে প্রয়োজন ছিল না) সে সম্পর্কে এটি যথেষ্ট পরিমাণে জ্ঞানের প্রয়োজন। ধন্যবাদ!
জোনাথন লেফলার

8
নোট করুন যে এখানে "গিট এলএস-ফাইল
পেটর গ্ল্যাডখিখ

1
সুতরাং, git ls-files --deleted | xargs git rmআমার জন্য কৌশলটি।
ফায়োকোবেলি

50

বাইস্ক্রিপ্টের উত্তরটির আরও একটি সংস্করণ

git rm $(git ls-files --deleted)

এটি কেবল গিট থেকে মুছে ফেলা ফাইলগুলি সরিয়ে ফেলবে।

এটি কেবলমাত্র পরিবর্তিত ফাইলগুলি যুক্ত করার জন্যও ব্যবহার করা যেতে পারে।

git add $(git ls-files --modified)

এই কমান্ডগুলি উইন্ডোগুলির জন্য গিটব্যাশগুলিতেও কাজ করে।


2
অমূল্য, git ls-filesস্থিতি মোছা বা সংশোধিত সহ এত সহায়ক।
মারিও পেশেভ

1
'git add --update (or -u)'গাছের একটি উপ-ডিরেক্টরি থেকে কোনও পথ তর্ক না করার আচরণ গিট ২.০ এ পরিবর্তিত হবে এবং এটি আর ব্যবহার করা উচিত নয়। পুরো গাছের জন্য সামগ্রী যুক্ত করতে, চালান: git add --update :/ (বা গিট অ্যাড-ইউ: /) বর্তমান ডিরেক্টরিতে কমান্ড সীমাবদ্ধ করতে চালান: git add --update . (বা গিট অ্যাড-ইউ।) বর্তমান গিট সংস্করণ দিয়ে কমান্ডটি সীমাবদ্ধ বর্তমান ডিরেক্টরি
উত্তর

1
এগুলির ফাঁকা জায়গা দিয়ে কীভাবে পাথগুলি পরিচালনা করবেন কোনও ধারণা? উদাহরণ: src/my spaced directory/myfile। এটি স্বতন্ত্রভাবে পরিচালনা করা যেতে পারে তবে এই উত্তরের আদেশগুলি ব্যবহার করে এটি কীভাবে পরিচালনা করা যায়?
মুহাম্মদ জেলবানা

35

আপনার করা সমস্ত পরিবর্তন আপডেট করুন:

git add -u

মুছে ফেলা ফাইলগুলি স্টেস্টেড (সাধারণত লাল রঙ) থেকে পর্যায়ক্রমে (সবুজ) পরিবর্তিত হওয়া উচিত। তারপরে মুছে ফেলা ফাইলগুলি সরিয়ে নেওয়ার প্রতিশ্রুতিবদ্ধ:

git commit -m "note"

1
পপুলিস্ট ব্যাজটি প্রাপ্য।
জন

1
এটি এখন পর্যন্ত সেরা সমাধান is কোনও স্ক্রিপ্টিং হ্যাক নেই, দীর্ঘ প্রক্রিয়া নেই, গিটকে এর সূচকটি পুরোপুরি আপডেট করতে বলার জন্য কেবল একটি পতাকা।
রন ডাহলগ্রেন

উজ্জ্বল! 20+ ফাইল পাথ টাইপ করা থেকে আমাকে বাঁচিয়েছে। ধন্যবাদ!
অ্যালার্ডব্রইন

12

আপনি যদি পরিবর্তিত ফাইলগুলির স্টেজিংয়ের বিষয়ে চিন্তা না করেন তবে সর্বোত্তম সমাধান হ'ল এমশায়ার্স এবং / অথবা পিবি 2 কিউ-রgit add -u বলা হিসাবে ব্যবহার করা ।

আপনি যদি কেবল মুছে ফেলা ফাইলগুলি সরাতে চান তবে কোনও সংশোধিত ফাইল মঞ্চে না রাখেন, আমি মনে করি বিকল্পটি ls-filesদিয়ে আপনার যুক্তিটি ব্যবহার করা উচিত --deleted(রেইজেক্স বা অন্যান্য জটিল আরগস / বিকল্পগুলি ব্যবহার করার দরকার নেই):

git ls-files --deleted | xargs git rm

1
git add -Aএই সমস্যাটি সমাধান করে ... ভবিষ্যতে যদি কেউ জানতে চায় তবেই। নীচের উত্তরটি চেক করুন
Ja8zyjits

8

হ্যাঁ, git rm <filename>একটি ফাইলের মুছে ফেলা অবস্থার মঞ্চস্থ করবে, যেখানে <filename>গ্লোব প্যাটার্ন হতে পারে:

$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    modules/welcome/language/english/kaimonokago_lang.php
#       ...

তারপরে, আপনি প্রতিশ্রুতিবদ্ধ করতে পারেন।

git commit -a আপনি চাইলে একসাথে এটি করবেন।

আপনি git add -uমুছে ফেলা সমস্ত ফাইল সহ সমস্ত পরিবর্তন মঞ্চ করতে ব্যবহার করতে পারেন , তারপরে প্রতিশ্রুতিবদ্ধ।


তাই আরএম। (পুরো স্টপ) এগুলি একবারে মুছবেন?
শিনে

সুতরাং শুধু গিট আরএম একবারে সমস্ত মুছে ফেলবে?
শিনে

1
আপনি একাধিক ফাইল সরানোর জন্য গ্লোব-স্টাইলের প্যাটার্ন ব্যবহার করতে পারেন; একটি উদাহরণ দেখানোর জন্য আমি আমার উত্তর আপডেট করেছি।
বেন জেমস

5
এটি git add -uঠিক আমরা যা খুঁজছি তা হ'ল - আপনি যদি অনেকগুলি মুছে ফেলেন তবে সমস্ত মুছে ফেলতে চান, এটি সবচেয়ে সহজ এবং সর্বাধিক 'স্ট্যান্ডার্ড' উপায় বলে মনে হচ্ছে (অর্থাত্ কেস-নির্দিষ্ট গ্লোব বা জটিল শেলকে পার্সিং ছাড়াই) xargs)। এটি একসাথে সমস্ত পরিবর্তন যুক্ত করে তা ছাড়া, আমরা কী এটি ব্যবহার করতে চাই না এমন কোনও কারণ আছে?
ত্রিশ্বেব

7

যখন আমার কাছে প্রচুর ফাইলগুলি মুছে ফেলা হয়েছে যা প্রতিশ্রুতিবদ্ধকরণের জন্য অচিহ্নবদ্ধ রয়েছে, আপনি সেগুলির git rmসাথে এক শোতে সবগুলি করতে পারেন :

for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done

প্রশ্ন উত্তরদাতারা যেমন উল্লেখ করেছেন, তেমন সাবধানতা অবলম্বন করুন git rm



3

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

git commit -m "remove files" -a
git push

আপনি নিজে ফাইল মুছে ফেলার পরে।


1
বা স্বতঃস্ফূর্তভাবে তবে আরও সংজ্ঞায়িতভাবে: গিট কমিট -মাম "ফাইলগুলি সরান"
ব্র্যাড চেসনি79

3

আপনি শেল স্ক্রিপ্ট তৈরি করতে পারেন যা রান করার সময় আপনার সমস্ত ফাইল সরিয়ে ফেলবে:

git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh

তৈরি করা স্ক্রিপ্টটি হ'ল remove.shএবং এতে git rmকমান্ডের পুরো তালিকা রয়েছে ।




2

আপনি যদি "গিট আরএম" ব্যবহার করে সেগুলি মুছতে চান। এই আমি কি কি:

git ls-files --deleted -z | xargs -0 git rm

এই কোয়েরিটি সমস্ত ফাইলগুলি মুছে ফেলা হয়েছে যা আপনার গিট সংগ্রহস্থল থেকে মুছে ফেলা হয়েছে এবং সেগুলি মুছে ফেলেছে। আশা করি এটা সাহায্য করবে.



1

আমি এগুলি মুছে ফেলার পরে এবং এই ঝরঝরে কমান্ডটি আসার পরে আমার রেপোতে ভুতের ফাইলগুলির বিষয়টি প্রকাশিত হয়েছিল!

git add -A

এটি মূলত সমান git add -aএবং git add -uসংযুক্ত, তবে এটি ক্ষেত্রে সংবেদনশীল। আমি এই দুর্দান্ত লিঙ্কটি থেকে পেয়েছি (এই লিঙ্কটি এখন আর্কাইভ.অর্গের সংস্করণে নির্দেশ করে, কারণ আসল জুন ২০১ of পর্যন্ত স্প্যাম / ফিশিং পৃষ্ঠাতে রূপান্তরিত হয়েছে)


0

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

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'

নিম্নলিখিতটির সাথে এটি চালানোর আগে আপনি গিটের - ড্রাই-রান বিকল্প দিয়ে এটি পরীক্ষা করে দেখুন:

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'

ব্যাখ্যা:

git status --porcelain

এটি ডি "/ ফোল্ডারের পথে / একটি ফাইলের পাথ" এর মতো কিছু প্রিন্ট করে যা কেবল তখনই ঘটে যখন পাথের নামগুলিতে ফাঁক থাকে happens

awk '/^.D .*$/ {print $0}'

"ডি" দিয়ে শুরু হওয়া কেবল রেখাগুলি মেলে

sed 's/ D \(.*\)/\1/'

প্রতিটি স্ট্রিংয়ের সামনের অংশ থেকে "ডি" সরান

tr -d '"'

উদ্ধৃতিগুলি সরান, যদি থাকে তবে

xargs -I {} git rm '{}'

ফাইলের নাম ভেরিয়েবলগুলি সংজ্ঞায়িত করুন single g গিট আরএম এর অধীনে থাকা ফাইলের নামটি একক উদ্ধৃতিতে আবদ্ধ করা হয়েছে যাতে এটি ফাঁকা জায়গাগুলির সাথে ফাইলের নাম সমর্থন করে।

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