كيف يمكنني تجاهل التغييرات غير المتكررة في Git؟



15 Answers

بالنسبة إلى جميع الملفات غير المخزنة ، استخدم:

git checkout -- .

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

git checkout path/to/file/to/revert

تأكد من تضمين الفترة في النهاية.

git

كيف يمكنني تجاهل التغييرات في نسخة العمل الخاصة بي غير الموجودة في الفهرس؟




هذا يتحقق من الفهرس الحالي للدليل الحالي ، ورمي كل التغييرات في الملفات من الدليل الحالي لأسفل.

git checkout .

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

git checkout-index -a -f



المفضل لدي هو

git checkout -p

وهذا يتيح لك إمكانية تغيير الأجزاء بشكل انتقائي.

أنظر أيضا:

git add -p



أنا حقا وجدت هذه المقالة مفيدة لشرح متى تستخدم ما الأمر: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

هناك عدة حالات مختلفة:

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

    git checkout -- foo.txt

  2. إذا قمت بتدوين الملف ، استخدم git reset. إعادة تعيين التغييرات الفهرس لمطابقة ارتكاب.

    git reset -- foo.txt

أظن أن استخدام git stash هو خيار شائع لأنه أقل خطورة. يمكنك دائما العودة إليها إذا كنت تهب كثيرا عن طريق الخطأ عند استخدام git إعادة. إعادة تعيين العودية بشكل افتراضي.

ألق نظرة على المقالة أعلاه للحصول على مزيد من النصائح.




إذا لم تكن مهتمًا بالحفاظ على التغييرات غير الثابتة (خاصة إذا كانت التغييرات المرحّلة هي ملفات جديدة) ، فقد وجدت هذا مفيدًا:

git diff | git apply --reverse



git checkout -f

man git-checkout :

-f, --force

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

عند التحقق من المسارات من الفهرس ، لا تفشل عند الإدخالات غير المدمجة ؛ بدلاً من ذلك ، يتم تجاهل الإدخالات غير المدمجة.




بدلاً من تجاهل التغييرات ، أعدت تعيين جهاز التحكم عن بُعد إلى الأصل. ملاحظة - هذه الطريقة هي لاستعادة المجلد الخاص بك تماما إلى أن من الريبو.

لذلك أفعل هذا للتأكد من أنهم لا يجلسون هناك عندما أعيد تعيين (في وقت لاحق - يستثني gitignores على المنشأ / اسم الفرع)

ملاحظة: إذا كنت تريد الاحتفاظ بالملفات لم يتم تتبعها بعد ، ولكن ليس في GITIGNORE ، فقد ترغب في تخطي هذه الخطوة ، حيث ستقوم بمسح هذه الملفات غير المتقطعة في مستودع التخزين عن بُعد (شكرًاXtrmJosh).

git add --all

ثم انا

git fetch --all

ثم أعيد إلى الأصل

git reset --hard origin/branchname

سيعيد ذلك إلى المربع الأول. تمامًا مثل RE-Cloning الفرع ، أثناء الاحتفاظ بجميع ملفاتي المصممة محليًا وفي مكانها.

تحديث لكل تعليق مستخدم أدناه: التباين لإعادة تعيين أي فرع حالي يكون المستخدم قيد التشغيل.

git reset --hard @{u}



حاول كل الحلول أعلاه ولكن لا يزال لا يمكن التخلص من الملفات الجديدة غير الثابتة.

استخدم git clean -f لإزالة هذه الملفات الجديدة - مع الحذر رغم ذلك! لاحظ خيار القوة.




مجرد استخدام:

git stash -u

فعله. سهل.

إذا كنت تهتم بشدة بمكدساتك ، فيمكنك المتابعة باستخدام git stash drop . لكن في تلك المرحلة ، من الأفضل أن تستخدم (من ماريوس نواك):

git checkout -- .
git clean -df

ومع ذلك ، أنا أحب git stash -u الأفضل لأنه "يتجاهل" جميع التغييرات المتعقبة وغير المتحررة في أمر واحد فقط. بعد git checkout -- . يتجاهل فقط التغييرات المتعقبة ، و git clean -df فقط يتجاهل التغييرات git clean -df ... وكتابة كلا الأمرين هو الكثير من العمل :)




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



بغض النظر عن حالة الريبو ، يمكنك دائمًا إعادة التعيين على أي التزام سابق:

git reset --hard <commit hash>

سيؤدي ذلك إلى التخلص من جميع التغييرات التي تم إجراؤها بعد ارتكابها.




في رأيي،

git clean -df

يجب أن تفعل الخدعة. وفقا لوثائق جيت على git نظيفة

git-clean - إزالة الملفات غير المتقطعة من شجرة العمل

وصف

ينظف شجرة العمل بشكل متكرر لإزالة الملفات التي ليست تحت تحكم الإصدار ، بدءا من الدليل الحالي.

عادة ، تتم إزالة الملفات غير المعروفة إلى Git فقط ، ولكن إذا تم تحديد الخيار -x ، يتم أيضًا إزالة الملفات التي تم تجاهلها. يمكن أن يكون هذا ، على سبيل المثال ، مفيدًا لإزالة كافة منتجات الإنشاء.

إذا تم إعطاء أية وسائط اختيارية ... فسيتم تأثر هذه المسارات فقط.

خيارات

إزالة الدلائل غير untracked بالإضافة إلى الملفات untracked. إذا تم إدارة دليل untracked بواسطة مستودع Git آخر ، فلن تتم إزالته بشكل افتراضي. استخدم الخيار -f مرتين إذا كنت تريد بالفعل إزالة مثل هذا الدليل.

إذا لم يتم تعيين متغير تكوين Git clean.requireForce إلى false ، فإن git clean سيرفض تشغيله إلا إذا تم إعطاؤه -f أو -n أو -i.




إذا كانت جميع الملفات المرحلية قد ارتكبت بالفعل ، يمكن ببساطة إعادة ضبط الفرع على سبيل المثال من واجهة المستخدم الرسومية الخاصة بك مع حوالي ثلاث نقرات بالماوس: الفرع ، إعادة التعيين ، نعم !

لذا فإن ما أفعله في كثير من الأحيان من الناحية العملية لرد التغييرات المحلية غير المرغوب فيها هو ارتكاب كل الأشياء الجيدة ، ثم إعادة تعيين الفرع.

إذا ارتكبت الأشياء الجيدة في ارتكاب واحد ، فيمكنك استخدام "تعديل الالتزام الأخير" لإعادته إلى مراحل أو عدمه إذا كنت ترغب في النهاية في الالتزام به بشكل مختلف قليلاً.

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

لذلك باختصار ، أنا ببساطة ارتكاب ، وإعادة تعيين فرع ، وتعديل مشاركة الأخيرة .




يمكنك إنشاء اسم مستعار خاص بك يصف كيفية القيام بذلك بطريقة وصفية.

أستخدم الاسم المستعار التالي لتجاهل التغييرات.

تجاهل التغييرات في (قائمة) من الملف (الملفات) في شجرة العمل

discard = checkout --

بعد ذلك ، يمكنك استخدامه بجوار تجاهل جميع التغييرات:

discard .

أو مجرد ملف:

discard filename

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

تنظيف وتجاهل التغييرات والملفات untracked في شجرة العمل

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

لذلك فإن الاستخدام بسيط كما يلي:

cleanout

متاح الآن في ريبو جيثوب القادم الذي يحتوي على الكثير من الأسماء المستعارة:




كان لدي وضع غريب حيث يتم دائمًا فصل الملف ، وهذا يساعدني على حل المشكلة.

git rm .gitattributes
git add -A
git reset --hard




Related


Tags

git