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



Answers

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

git checkout path/to/file/to/revert

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

git checkout -- .

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

Question

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




هذا يعمل حتى في الدلائل التي هي؛ خارج أذونات جيت العادي.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

حدث لي مؤخرا




عندما تريد نقل خبأ إلى شخص آخر:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

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




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

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

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

git add --all

ثم انا

git fetch --all

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

git reset --hard origin/branchname

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

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

git reset --hard @{u}



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

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

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

discard = checkout --

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

discard .

أو مجرد ملف:

discard filename

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

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

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

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

cleanout

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




git checkout -f

man git-checkout :

-f, --force

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

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




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

git diff | git apply --reverse



أنا حقا وجدت هذه المقالة مفيدة لشرح متى تستخدم ما الأمر: 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 stash -u

فعله. سهل.

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

git checkout -- .
git clean -df

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




المفضل لدي هو

git checkout -p

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

أنظر أيضا:

git add -p



ما يلي هو حقاً فقط حل إذا كنت تعمل مع شوكة مستودع حيث تقوم بمزامنة بانتظام (على سبيل المثال طلب سحب) مع repo آخر. إجابة مختصرة: احذف شوكة و refork ، لكن اقرأ التحذيرات على جيثب .

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

غالبًا ما أحصل على رسائل حالة مثل هذه (تتضمن ملفات 2/4 على الأقل):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

ستلاحظ عين حادة أن هذه الملفات لها dopplegangers التي هي حرف واحد في حالة الإيقاف. بطريقة ما ، وليس لدي أي فكرة عن ما دفعني إلى هذا الطريق لبدء (كما كنت لا تعمل مع هذه الملفات بنفسي من الريبو المنبع) ، كنت قد تحولت هذه الملفات. جرب العديد من الحلول المدرجة في هذه الصفحة (والصفحات الأخرى) لا يبدو أنها تساعد.

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




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

git checkout .

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

git checkout-index -a -f



طريقة أخرى للتخلص من الملفات الجديدة التي هي أكثر تحديدًا من git clean -df (ستسمح لك بالتخلص من بعض الملفات ليس بالضرورة جميعًا) ، هي إضافة الملفات الجديدة إلى الفهرس أولاً ، ثم خبثها ، ثم إسقاطها خبأ.

هذه التقنية مفيدة عندما ، لسبب ما ، لا يمكنك بسهولة حذف جميع الملفات غير المتتبعة بواسطة آلية عادية (مثل rm).




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

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




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

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

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

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

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




Links