كيفية إزالة الملفات المحلية (التي لم يتم تعقبها) من شجرة عمل Git الحالية؟

StackOverflow https://stackoverflow.com/questions/61212

  •  09-06-2019
  •  | 
  •  

سؤال

كيف يمكنك حذف الملفات المحلية التي لم يتم تعقبها من شجرة العمل الحالية؟

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

المحلول

وفقًا لوثائق Git بوابة نظيفة

إزالة الملفات التي لم يتم تعقبها من شجرة العمل


الخطوة الأولى هي إظهار ما سيتم حذفه باستخدام الملف -n خيار:

# Print out the list of files which will be removed (dry run)
git clean -n

خطوة نظيفة - احذر:سيؤدي هذا إلى حذف الملفات:

# Delete the files from the repository
git clean -f
  • لإزالة الدلائل، قم بتشغيل git clean -f -d أو git clean -fd
  • لإزالة الملفات التي تم تجاهلها، قم بتشغيل git clean -f -X أو git clean -fX
  • لإزالة الملفات المتجاهلة وغير المتجاهلة، قم بتشغيل git clean -f -x أو git clean -fx

ملحوظة اختلاف الحالة على X للأمرين الأخيرين.

لو clean.requireForce تم ضبطه على "صحيح" (الافتراضي) في التكوين الخاص بك، ويحتاج المرء إلى تحديده -f وإلا فلن يحدث شيء في الواقع.

انظر مرة أخرى git-clean المستندات لمزيد من المعلومات.


خيارات

-f, --force

إذا لم يتم ضبط متغير تكوين GIT. -f, -n أو -i.

-x

لا تستخدم القواعد المعيارية تجاهل القراءة من .gitignore (لكل دليل) و $GIT_DIR/info/exclude, ، لكن لا يزال لا يزال يستخدم القواعد الممنوحة مع -e خيارات.هذا يسمح بإزالة جميع الملفات غير المقيدة ، بما في ذلك إنشاء منتجات.يمكن استخدام هذا (ربما بالتزامن مع إعادة تعيين GIT) لإنشاء دليل عمل بدائي لاختبار بناء نظيف.

-X

قم بإزالة الملفات التي تجاهلها Git فقط.قد يكون هذا مفيدًا لإعادة بناء كل شيء من نقطة الصفر ، ولكن احتفظ بالملفات التي تم إنشاؤها يدويًا.

-n, -dry-run

لا تقم بإزالة أي شيء فعليًا، فقط أظهر ما سيتم فعله.

-d

قم بإزالة الدلائل التي لم يتم تعقبها بالإضافة إلى الملفات التي لم يتم تعقبها.إذا تمت إدارة دليل غير مرغوب فيه بواسطة مستودع GIT مختلف ، فلن تتم إزالته افتراضيًا.يستخدم -f الخيار مرتين إذا كنت تريد حقًا إزالة مثل هذا الدليل.

نصائح أخرى

يستخدم git clean -f -d للتأكد من أن الدلائل تتم إزالتها أيضًا.

يمكنك بعد ذلك التحقق مما إذا كانت ملفاتك قد اختفت بالفعل git status.

أنا مندهش أنه لم يذكر أحد هذا من قبل:

git clean -i

هذا يعني تفاعلية وستحصل على نظرة عامة سريعة على ما سيتم حذفه مما يوفر لك إمكانية تضمين/استبعاد الملفات المتأثرة.بشكل عام، لا يزال أسرع من تشغيل الإلزامي --dry-run قبل التنظيف الحقيقي

سيكون عليك رمي أ -d إذا كنت تريد أيضًا الاهتمام بالمجلدات الفارغة.في النهاية، يُنشئ اسمًا مستعارًا لطيفًا:

git iclean

ومع ذلك، فإن الإمساك باليد الإضافية للأوامر التفاعلية يمكن أن يكون متعبًا للمستخدمين ذوي الخبرة.في هذه الأيام أنا فقط استخدم ما سبق ذكره git clean -fd

إذا كان الدليل الذي لم يتم تعقبه عبارة عن مستودع git خاص به (على سبيل المثال.الوحدة الفرعية)، تحتاج إلى استخدامها -f مرتين:

git clean -d -f -f

طريقة بسيطة لإزالة الملفات التي لم يتم تعقبها

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

git add --all
git reset --hard HEAD

انا يعجبني git stash push -u لأنه يمكنك التراجع عن كل منهم git stash pop.

يحرر:لقد وجدت أيضًا طريقة لإظهار الملف الذي لم يتم تعقبه في مخبأ (على سبيل المثال. git show stash@{0}^3) https://stackoverflow.com/a/12681856/338986

تحرير 2: git stash save يتم إهماله لصالح push.شكرًا @script-wolf.

هذا ما أستخدمه دائمًا:

git clean -fdx

بالنسبة لمشروع كبير جدًا، قد ترغب في تشغيله عدة مرات.

git-clean هو ما تبحث عنه.يتم استخدامه لإزالة الملفات التي لم يتم تعقبها من شجرة العمل.

إذا لزم الأمر لإزالة الملفات التي لم يتم تعقبها من دليل فرعي معين،

git clean -f {dir_path}

وطريقة مدمجة لحذف الملفات/الملفات التي لم يتم تعقبها والملفات التي تم تجاهلها.

git clean -fxd {dir_path}

بعد ذلك سيكون لديك ملفات معدلة فقط في git status.

git clean -fd يزيل الدليل

git clean -fX يزيل الملفات التي تم تجاهلها

git clean -fx يزيل الملفات التي تم تجاهلها وغير المتجاهلة

يمكن استخدام جميع الخيارات المذكورة أعلاه مجتمعة

git clean -fdXx

تحقق من دليل git لمزيد من المساعدة

قم بإزالة كافة المجلدات والملفات الإضافية في وحدات الريبو + الفرعية هذه

هذا يجعلك في نفس حالة الاستنساخ الجديد.

git clean -ffdx

قم بإزالة جميع المجلدات والملفات الإضافية في هذا الريبو ولكن ليس وحداته الفرعية

git clean -fdx

قم بإزالة المجلدات الإضافية فقط وليس الملفات (على سبيل المثال.مجلد البناء)

git clean -fd

إزالة المجلدات الإضافية + الملفات التي تم تجاهلها (ولكن ليس أي ملفات تمت إضافتها حديثًا)

إذا لم يتم تجاهل الملف ولم يتم تسجيل الوصول إليه بعد، فسيبقى.لاحظ العاصمة X.

git clean -fdX

الوضع التفاعلي الجديد

git clean

نعم، حذف الملفات والمجلدات غير المرغوب فيها التي لم يتم تعقبها سهلة الاستخدام git في سطر الأوامر، فقط قم بذلك مثل هذا:

git clean -fd

التأكد مرتين قبل القيام بذلك لأنه سيحذف الملفات والمجلدات دون إنشاء أي سجل...

وفي هذه الحالة أيضًا، -f لتقف على القوة و -d يعني الدليل...

لذلك، إذا كنت تريد حذف الملفات فقط، يمكنك استخدام -f فقط:

git clean -f

إذا كنت تريد حذف (الدلائل) والملفات، فيمكنك فقط حذف الدلائل والملفات التي لم يتم تعقبها مثل هذا:

git clean -fd

أيضا، يمكنك استخدام -x إشارة لتضمين الملفات التي تم تجاهلها بواسطة git.سيكون هذا مفيدًا إذا كنت تريد حذف كل شيء.

وإضافة -i العلم، يجعل git يطلب منك الإذن لحذف الملفات واحدًا تلو الآخر أثناء التنقل.

إذا لم تكن متأكدًا وتريد التحقق من الأمور أولاً، أضف -n علَم.

يستخدم -q إذا كنت لا تريد رؤية أي تقرير بعد الحذف الناجح.

لقد قمت أيضًا بإنشاء الصورة أدناه لجعلها أكثر قابلية للتذكر، خاصة أنني رأيت الكثير من الناس يربكون -f لتنظيف المجلد أحيانًا أو مزجه بطريقة ما!


deleting unwanted untracked files and folder

الطريقة الأفضل هي استخدام:بوابة نظيفة

git clean -d -x -f

يؤدي هذا إلى إزالة الملفات التي لم يتم تعقبها، بما في ذلك الدلائل (-d) والملفات التي تجاهلها git (-x).

كذلك قم باستبدال -f حجة مع -n لأداء أ dry-run أو -i للوضع التفاعلي وسيخبرك بما سيتم إزالته.

النهج التفاعلي للمستخدم:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i للتفاعلية
-f للقوة
-د للدليل
-x للملفات التي تم تجاهلها (أضفها إذا لزم الأمر)

ملحوظة: يضيف أو --ركض جاف للتحقق فقط مما سيفعله.

git clean -f -d -x $(git rev-parse --show-cdup) ينطبق التنظيف على الدليل الجذر، بغض النظر عن مكان استدعائه داخل شجرة دليل المستودع.أستخدمه طوال الوقت لأنه لا يجبرك على مغادرة المجلد الذي تعمل فيه الآن ويسمح بالتنظيف والالتزام مباشرة من المكان الذي تتواجد فيه.

تأكد من أن الأعلام -f, -d, -x تطابق احتياجاتك:

-d
       Remove untracked directories in addition to untracked files. If an
       untracked directory is managed by a different Git repository, it is
       not removed by default. Use -f option twice if you really want to
       remove such a directory.

-f, --force
       If the Git configuration variable clean.requireForce is not set to
       false, git clean will refuse to delete files or directories unless
       given -f, -n or -i. Git will refuse to delete directories with .git
       sub directory or file unless a second -f is given. This affects
       also git submodules where the storage area of the removed submodule
       under .git/modules/ is not removed until -f is given twice.

-x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

هناك أعلام أخرى متاحة أيضًا، فقط تحقق منها git clean --help.

بالنسبة لي عملت فقط ما يلي:

git clean -ffdx

وفي جميع الحالات الأخرى، كنت أتلقى رسالة "تخطي الدليل" لبعض الدلائل الفرعية.

حيلة حياتية لمثل هذا الموقف اخترعتها وجربتها للتو (وهي تعمل بشكل مثالي):

git add .
git reset --hard HEAD

احذر! تأكد من إجراء أي تغييرات مطلوبة (حتى في الملفات التي لم يتم تعقبها) قبل تنفيذ هذا.

إذا كنت تريد فقط حذف الملفات المدرجة على أنها لم يتم تعقبها بواسطة "حالة git"

git stash save -u
git stash drop "stash@{0}"

أنا أفضل أن يكون هذا "Git Clean" لأن "Git Clean" سوف يحذف الملفات التي يتم تجاهلها بواسطة GIT ، لذلك سيتعين على بنك التالي إعادة بناء كل شيء وقد تفقد إعدادات IDE أيضًا.

لمعرفة ما سيتم حذفه قبل الحذف الفعلي:

git clean -d -n

سوف يخرج شيء مثل:

من شأنه إزالة Sample.txt

لحذف كل ما هو مدرج في مخرجات الأمر السابق:

git clean -d -f

سوف يخرج شيء مثل:

إزالة Sample.txt

لإزالة الملفات التي لم يتم تعقبها، يجب عليك أولاً استخدام الأمر لعرض الملفات التي ستتأثر بعملية التنظيف

git clean -fdn

سيظهر لك هذا قائمة الملفات التي سيتم حذفها.الآن لحذف هذه الملفات فعليًا، استخدم هذا الأمر:

git clean -fd

كن حذرًا أثناء تشغيل أمر git clean.

دائما يستخدم -n قبل تشغيل الأمر الفعلي لأنه سيُظهر لك الملفات التي ستتم إزالتها.

git clean -n -d 
git clean -f -d

بشكل افتراضي، git clean سيؤدي فقط إلى إزالة الملفات التي لم يتم تعقبها والتي لم يتم تجاهلها.لن تتم إزالة أي ملف يطابق النمط الموجود في ملف .gitignore أو ملفات التجاهل الأخرى.إذا كنت تريد إزالة هذه الملفات أيضًا، فيمكنك إضافة ملف -x إلى الأمر النظيف.

git clean -f -d -x

يتوفر أيضًا الوضع التفاعلي -i مع الأمر النظيف

git clean -x -i

بدلاً عن ذلك

إذا لم تكن متأكدًا بنسبة 100% من أن حذف عملك غير الملتزم به آمن، فيمكنك استخدام التخزين بدلاً من ذلك

git stash --all

سيؤدي أيضًا إلى مسح الدليل الخاص بك ولكنه يمنحك المرونة لاسترداد الملفات في أي وقت باستخدام خبأ مع يتقدم أو البوب.ثم في وقت لاحق يمكنك مسح مخبأتك باستخدام:

git stash drop // or clean

طبيعي git clean لا يقوم الأمر بإزالة الملفات التي لم يتم تعقبها باستخدام ملفي git version 2.9.0.windows.1.

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!

git clean -f to remove untracked files from working directory.

لقد قمت بتغطية بعض الأساسيات هنا في مدونتي، git-intro-basic-commands

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

بوابة نظيفة - إزالة الملفات التي لم يتم تعقبها من شجرة العمل

الطريقة المقترحة: الوضع التفاعلي باستخدام git clean -iحتى نتمكن من السيطرة عليها.دعونا نرى الخيارات المتاحة المتبقية.

الخيارات المتاحة:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

توضيح:

1.

قم بإزالة الدلائل التي لم يتم تعقبها بالإضافة إلى الملفات التي لم يتم تعقبها.إذا تمت إدارة دليل غير مرغوب فيه بواسطة مستودع GIT مختلف ، فلن تتم إزالته افتراضيًا.استخدم الخيار -f مرتين إذا كنت تريد حقًا إزالة هذا الدليل.

2.-و، --القوة

إذا لم يتم ضبط متغير تكوين GIT.

3.-i، --interactive

أظهر ما سيتم فعله وقم بتنظيف الملفات بشكل تفاعلي.راجع "الوضع التفاعلي" للحصول على التفاصيل.

4.-ن، - التشغيل الجاف

لا تقم بإزالة أي شيء فعليًا، فقط أظهر ما سيتم فعله.

5.-ف، - هادئ

كن هادئًا، وقم بالإبلاغ عن الأخطاء فقط، وليس عن الملفات التي تمت إزالتها بنجاح.

6.-e , --exclude=

بالإضافة إلى تلك الموجودة في .gitignore (لكل دليل) و $ git_dir/info/isscleude ، فكر أيضًا في أن تكون هذه الأنماط في مجموعة قواعد التجاهل السارية.

7.-x

لا تستخدم القواعد المعيارية للتجاهل القراءة من .gitignore (لكل دليل) و $ git_dir/info/issplude ، ولكن لا يزال لا يزال يستخدم القواعد المتجاهل المعطاة مع خيارات -e.وهذا يسمح بإزالة جميع الملفات التي لم يتم تعقبها، بما في ذلك منتجات البناء.يمكن استخدام هذا (ربما بالتزامن مع إعادة تعيين GIT) لإنشاء دليل عمل بدائي لاختبار بناء نظيف.

8.-X

قم بإزالة الملفات التي تجاهلها Git فقط.قد يكون هذا مفيدًا لإعادة بناء كل شيء من البداية، مع الاحتفاظ بالملفات التي تم إنشاؤها يدويًا.

يمكننا بسهولة إزالة الملفات المحلية التي لم يتم تعقبها من شجرة عمل git الحالية باستخدام تعليقات git أدناه.

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

مثال:

git reset --hard HEAD

الروابط :

  1. https://git-scm.com/docs/git-reset
  2. كيف يمكنني استخدام "gitset --hard HEAD" للعودة إلى الالتزام السابق؟
  3. إعادة تعيين فرع المستودع المحلي ليكون مثل رأس المستودع البعيد
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

قم بتنظيف مستودع git وجميع الوحدات الفرعية بشكل متكرر

سيقوم الأمر التالي بتنظيف مستودع GIT الحالي وجميع علاماته الفرعية بشكل متكرر:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

يا بلدي ZSH مع zsh يوفر تلك الأسماء المستعارة الرائعة عبر البرنامج المساعد git.ويمكن استخدامها في باش كذلك.

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • gclean يزيل الدلائل التي لم يتم تعقبها بالإضافة إلى الملفات التي لم يتم تعقبها.
  • gpristine إعادة ضبط التغييرات المحلية ، إزالة الدلائل غير المقيدة ، والملفات غير المعروفة ، و لا تستخدم قواعد التجاهل القياسية المقروءة من .gitignore (لكل دليل) و$GIT_DIR/info/exclude، ولكن لا تزال تستخدم قواعد التجاهل المقدمة مع خيارات -e.وهذا يسمح بإزالة جميع الملفات التي لم يتم تعقبها، بما في ذلك منتجات البناء.يمكن استخدام هذا (ربما بالتزامن مع إعادة تعيين git) لإنشاء دليل عمل أصلي لاختبار البنية النظيفة.
git clean -f

سيؤدي إلى إزالة الملفات التي لم يتم تعقبها من البوابة الحالية

git clean -fd

عندما تريد إزالة الدلائل والملفات، سيؤدي هذا إلى حذف الدلائل والملفات التي لم يتم تعقبها إلا

ملحوظة:انتقل أولاً إلى الدليل وقم بالخروج من الفرع الذي تريد تنظيفه.

-i الوضع التفاعلي وسيخبرك بما سيتم إزالته ويمكنك اختيار إجراء من القائمة.

  1. لينظف ملفات فقط [لن يتم إدراج المجلدات ولن يتم تنظيفها]:$ git clean -i

  2. لينظف الملفات والمجلدات: $ git clean -d -i

-d بما في ذلك الدلائل.


إذا اخترت c من القائمة.سيتم حذف الملفات/المجلدات التي لم يتم تعقبها، كما سيتم أيضًا إزالة الملفات/المجلدات التي أخطأت فيها.*

على سبيل المثال:إذا قمت بإعادة هيكلة المجلد الموجود في جهاز التحكم عن بُعد الخاص بك وسحب التغييرات إلى جهاز الكمبيوتر المحلي الخاص بك.الملفات/المجلدات التي أنشأها الآخرون في البداية ستكون في المجلد السابق وفي المجلد الجديد الذي تقوم بإعادة هيكلته.

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