GIT: أريد إلغاء مراحل جميع الملفات التي تطابق نمطًا معينًا
-
26-09-2019 - |
سؤال
أود الجري
git reset *.foo
لكن هذه الأخطاء خارج.
أعتقد أنني بحاجة إلى استخدام أنبوب ، لكنني لست متأكدًا من كيفية القيام بذلك.
شكرًا!
المحلول
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
git reset HEAD "$i"
git checkout "$i"
done
نصائح أخرى
إذا كنت تستخدم PowerShell ، فسيعمل التالي.
gci -re -in *foo | %{ git reset $_ }
هذا يجب أن يعمل في Cygwin و Unix Env
git reset $(git diff --name-only --cached | grep *.foo)
في تطبيق GIT واجهة المستخدم الرسومية مثل SmartGit أود تصفية الملفات المعروضة بالنمط *.foo
, ، اضغط على Ctrl+A لتحديد جميع الملفات التي تمت تصفيتها واستدعاء الأمر UNSTAGE.
على سبيل المثال ، أريد أن أتطابق مع جميع "الترحيل" في المسار.
git diff-name-only | هجرات GREP | Xargs git headout
إذا أردت أن الدفع (التراجع عن التغييرات) من دون تنصيب الملفات المعدلة التي تطابق نمطًا معينًا ، يعمل هذا:
ماكوس:
git checkout $(git st -s | sed -E 's/^.{2}//' | grep '\.foo$')
يونيكس:
git checkout $(git st -s | sed -r 's/^.{2}//' | grep '\.foo$')
لقد اختبرت هذا فقط مع M
الملفات المعدلة. ymmv إذا كنت قد قمت بإعادة تسمية/حذف/ملفات متضاربة أيضًا.
كانت المساحة البيضاء في اسم الملف تسبب مشاكل في استخدام git diff
النهج ولكن ما يلي نجح:
find ./ -name "*.foo" -exec git reset {} \;
التنفيذ مطول إذا كان هناك العديد من الملفات التي لا يمكن تنظيمها.
ببساطة الاستخدام git reset *mypattern*