سؤال

لقد قمت بإضافة ملف اسمه "file1.txt" إلى مستودع Git.بعد ذلك، ارتكبت ذلك، أضفت بضعة أدلة تسمى dir1 و dir2, ، وإلزامهم بمستودع Git.

الآن أصبح المستودع الحالي "file1.txt", dir1, ، و dir2.كيف يمكنني حذف "file1.txt" دون التأثير على الآخرين، مثل dir1 و dir2?

هل كانت مفيدة؟

المحلول

يستخدم git rm:

git rm file1.txt
git commit -m "remove file1.txt"

ولكن إذا كنت ترغب في إزالة الملف فقط من مستودع GIT وليس إزالته من نظام الملفات، فاستخدم:

git rm --cached file1.txt
git commit -m "remove file1.txt"

ودفع التغييرات إلى Remote Repo

git push origin branch_name  

نصائح أخرى

git rm file.txt يزيل الملف من الريبو ولكن أيضا حذفها من نظام الملفات المحلية.

لإزالة الملف من الريبو و ليس احذفها من استخدام نظام الملفات المحلية:
git rm --cached file.txt

الوضع الدقيق أدناه هو المكان الذي استخدم فيه GIT للحفاظ على عنصر تحكم الإصدار لموقع عمل عملي، لكن دليل "Mickey" كان مجلد TMP لمشاركة المحتوى الخاص مع مطور CAD. عندما احتاج إلى ملفات ضخمة، قمت بإجراء دليل خاص وشروط غير مقطوع و FTPD الملفات هناك لإحضاره عبر المتصفح. نسيان فعلت هذا، لقد أجريت لاحقا git add -A من دليل الموقع الإلكتروني. تبعًا، git status أظهرت الملفات الجديدة التي تحتاج إلى ارتكاب. الآن كنت بحاجة لحذفها من تحكم وتتبع الإصدار GIT ...

الناتج العينة أدناه هو من ما حدث لي للتو، حيث حذفت عن غير قصد .003 ملف. لحسن الحظ، لا يهمني ما حدث للنسخة المحلية .003, ، ولكن بعض الملفات الأخرى التي تم تغييرها حاليا كانت تحديثات أنا فقط قدمت على الموقع الإلكتروني وستكون ملحمة تم حذفها على نظام الملفات المحلية! "نظام الملفات المحلية" = الموقع Live (ليس ممارسة كبيرة، ولكن الواقع).

[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
#   modified:   shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.002
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
[~/www]$

تحديث: هذه الإجابة هي الحصول على بعض حركة المرور، لذلك اعتقدت أنني سأذكر بلدي إجابة الجيت الأخرى يشارك بضعة موارد رائعة: هذه الصفحة لديه رسم يساعد في الغموض على git لي. ال كتاب "برو جيت" ويساعدني كثيرا.

إذا كان الملف الخاص بك موجود بالفعل في Github، أنت الآن (يوليو 2013) حذفها مباشرة من واجهة المستخدم الرسومية ويب!

ما عليك سوى عرض أي ملف في مستودعك، انقر فوق رمز القمامة في الأعلى، والالتزام بالإزالة تماما مثل أي تحرير على شبكة الإنترنت.

ثم "git pull"على الريبو المحلي الخاص بك، وسوف حذف الملف محليا أيضا.
مما يجعل هذه الإجابة على طريقة (Roundabout) لحذف ملف من جيت ريبو؟
(ناهيك عن ذلك ملف على جيثب هو في "ريبو جيت")


delete button

(سوف يعكس الالتزام حذف هذا الملف):

commit a deletion

وهذا تماما مثل، ذهب.

للحصول على مساعدة في هذه الميزات، تأكد من قراءة مقالات المساعدة الخاصة بنا خلق, متحرك, إعادة تسمية, ، و حذف الملفات.

ملاحظة: نظرا لأن نظام التحكم الإصدار، يكون Git دائما ظهرك إذا كنت بحاجة إلى استرداد الملف لاحقا.

الجملة الأخيرة تعني أن الملف المحذوف لا يزال جزءا من التاريخ، ويمكنك استعادته بسهولة كافية (ولكن ليس بعد عبر واجهة الويب GitHub):

يرى "استعادة الملف المحذوف في repo git".

هذا هو الخيار الوحيد الذي عمل بالنسبة لي.

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

ملاحظة: استبدل * .sql مع اسم الملف أو نوع الملف. كن حذرا للغاية لأن هذا سيذهب من خلال كل الالتزام ونسخ هذا الملف.

تحرير: إيلاء الاهتمام - بعد هذا الأمر، لن تكون قادرا على الدفع أو السحب - سترى رفض "التاريخ غير المرتبط"، يمكنك استخدام "Git Push - Vorforce - Oreast Master" لدفع أو سحب

بالإضافة إلى ذلك، إذا كان هناك مجلد يتم إزالته ومجلدات الأطفال أو الملفات اللاحقة، فاستخدم:

git rm -r foldername

بشكل عام، git help سوف تساعد في أسئلة بسيطة على الأقل مثل هذا:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index

إذا كنت ترغب في حذف الملف من Repo، ولكن اتركه في نظام الملفات (سيكون غير مهذب):

bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"

إذا كنت ترغب في حذف الملف من Repo ومن نظام الملفات، فهناك خياران:

  1. إذا كان الملف لا يحتوي على تغييرات في الفهرس:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. إذا كان الملف يحتوي على تغييرات في الفهرس:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    

git rm سيتم إزالة الملف فقط على هذا الفرع من الآن فصاعدا، لكنه يبقى في التاريخ وستتذكره الجيت.

الطريقة الصحيحة للقيام بذلك هي مع git filter-branch, ، كما ذكر آخرون هنا. سوف يعيد كتابة كل الالتزام في تاريخ الفرع لحذف هذا الملف.

ولكن، حتى بعد القيام بذلك، يمكن ل GIT أن يتذكره لأنه يمكن أن يكون هناك إشارات إليها في الأرجوحة، وعجلات، العلامات، وهن.

إذا كنت ترغب في طمسها تماما في خطوة واحدة، أوصي بك git forget-blob

https://ownyourbits.com/2015/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

إنه سهل، فقط git forget-blob file1.txt.

هذا سوف يزيل كل مرجع، القيام به git filter-branch, وأخيرا تشغيل جامع القمامة جيت git gc للتخلص تماما من هذا الملف في ريبو الخاص بك.

طريقة أخرى إذا كنت ترغب في حذف الملف من المجلد المحلي باستخدام أمر RM ثم ادفع التغييرات إلى الخادم البعيد.

rm file1.txt

git commit -a -m "Deleting files"

git push origin master

لحذف ملف معين

git rm filename.

لتنظيف جميع الملفات غير المستخدمة من دليل متكرر في طلقة واحدة

جيت نظيفة -fdx.

إذا كان لديك تطبيق GitHub لنظام التشغيل Windows، فيمكنك حذف ملف في 5 خطوات سهلة:

  • انقر المزامنة.
  • انقر فوق الدليل حيث يوجد الملف وحدد أحدث إصدار من الملف.
  • انقر على الأدوات وحدد "فتح قذيفة هنا".
  • في Shell، اكتب: "RM {filename}" واضغط على Enter.
  • ارتكاب التغيير و resync.

في حالتي حاولت إزالة الملف على Github بعد ارتكاب قليل ولكن حفظ على الكمبيوتر

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master

وفي وقت لاحق تم تجاهل هذا الملف

ملحوظة:إذا كنت تريد حذف الملف فقط من git، استخدم أدناه:

git rm --cached file1.txt

إذا كنت تريد الحذف أيضًا من القرص الصلب:

git rm file1.txt

إذا كنت تريد إزالة مجلد (قد يحتوي المجلد على عدد قليل من الملفات)، فيجب عليك الإزالة باستخدام الأمر العودي، كما هو موضح أدناه:

git rm -r foldername

إذا كنت تريد إزالة مجلد داخل مجلد آخر

git rm -r parentFolder/childFolder

إذا تستطيع commit و push كل عادة.ومع ذلك، إذا كنت تريد استعادة المجلد المحذوف، يمكنك اتباع هذا: من الممكن استعادة الملفات المحذوفة من بوابة.

من المستند:

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​

خيارات

<file>…​

Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you

قد تحتاج إلى الهروب منهم.اسم الدليل الرئيسي (على سبيل المثال.يمكن إعطاء DIR إلى إزالة dir/file1 و dir/file2) لإزالة جميع الملفات في الدليل ، ومتكرر جميع المخرجين الفرعيين ، ولكن هذا يتطلب خيار -r ليتم تقديمه بشكل صريح. -f --force

Override the up-to-date check.

-n --dry-run

Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.

-r

Allow recursive removal when a leading directory name is given.

--

This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for

خيارات سطر الأوامر). --cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

--ignore-unmatch

Exit with a zero status even if no files matched.

-q --quiet

git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.

اقرأ المزيد عن الوثيقة الرسمية.

  1. أولا، قم بإزالة الملفات من المستودع المحلي.

    GIT RM -R اسم الملف

    أو قم بإزالة الملفات فقط من مستودع محلي ولكن من نظام الملفات

    GIT RM - اسم الملف

  2. ثانيا، ارتكب التغييرات في مستودع محلي.

    git commit -m "unwanted files or some inline comments"   
    
  3. أخيرا، قم بتحديث / ادفع التغييرات المحلية في مستودع عن بعد.

    git push 
    

حاولت الكثير من الخيارات المقترحة ويبدو أن لا شيء يبدو للعمل (لن أذكر المشاكل المختلفة). ما انتهى به الأمر، الذي عمل، كان بسيطا وبديهيا (بالنسبة لي) كان:

  1. حرك الريبو المحلية بأكملها في مكان آخر
  2. استنساخ الريبو مرة أخرى من الماجستير إلى محرك الأقراص المحلي
  3. نسخ الملفات / المجلد من نسختك الأصلية في # 1 مرة أخرى إلى استنساخ جديد من # 2
  4. تأكد من أن مشكلة ملف كبير إما ليس هناك أو مستبعد في ملف .gitignore
  5. هل أدت / بوصة بوابة المعتادة المعتادة / دفعة جيت

بعد إزالة الملف من Repo git rm يمكنك استخدام BFG Repo-Cleaner إلى طمس الملف بالكامل وسهل بسهولة من تاريخ الريبو.

لدي ملفات OBJ و BIN التي قام بها بطريق الخطأ في Repo أنني لا أريد تلويث قائمة "ملفات الملفات المتغيرة"

بعد لقد لاحظت أنهم ذهبوا إلى جهاز التحكم عن بعد، لقد تجاهلتهم بإضافة هذا إلى .gitignore

/*/obj
/*/bin

المشكلة هي أنهم بالفعل في جهاز التحكم عن بعد، وعندما يتغيرون، يطفوون على إطلاق سراح قائمة الملفات التي تم تغييرها وتغييرها.

لإيقاف رؤيتهم، تحتاج إلى حذف المجلد بأكمله من مستودع البعيد.

في موجه الأوامر:

  1. CD إلى مجلد Repo (أي C:\repos\MyRepo)
  2. أريد حذف SSIS OBJ. يبدو أنه لا يمكنك حذف المستوى الأعلى فقط، لذلك تحتاج الآن إلى CD في SSIS: (أي C:\repos\MyRepo\SSIS)
  3. الآن اكتب التعويذ السحري git rm -r -f obj
    • RM = أخرجه
    • -r = إزالة بشكل متكرر
    • -f = يعني القوة، لأنك تعني حقا ذلك
    • OBJ هو المجلد
  4. الآن يدير git commit -m "remove obj folder"

حصلت على رسالة مثيرة للقلق تقول 13 ملفات تغيرت 315222 حذف

إذن لأنني لم أكن أرغب في البحث عن خط CMD، ذهبت إلى Sstudio Visual Sstudio وقمت بمزامنة لتطبيقها على جهاز التحكم عن بعد

Incase إذا لم تقم بتقديم ملف في Repo المحلي ولكن في Git Repo، فقم ببساطة فتح ملف في Git Repo عبر واجهة الويب وابحث عن زر حذف في الزاوية اليمنى في الواجهة.انقر هنا، لعرض خيار حذف الواجهة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top