GIT: أريد إلغاء مراحل جميع الملفات التي تطابق نمطًا معينًا

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

  •  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*

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