التراجع عن التزام معين في git تم دفعه إلى إعادة الديمقراطية عن بُعد

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

سؤال

ما هي أبسط طريقة للتراجع عن التزام معين هو:

  • ليس في الرأس أو الرأس
  • تم دفعه إلى جهاز التحكم عن بُعد.

لأنه إذا لم يكن الالتزام الأخير ،

git reset HEAD

لا يعمل. ولأنه تم دفعه إلى جهاز التحكم عن بُعد ،

git rebase -i

و

git rebase --onto

سوف يسبب بعض المشكلات في أجهزة التحكم عن بعد.

أكثر من ذلك ، لا أريد تعديل التاريخ حقًا. إذا كان هناك رمز سيء ، فقد كان هناك في التاريخ ويمكن رؤيته. أنا فقط أريدها في نسخة العمل ، ولا أمانع في الاندماج العكسي.

بمعنى آخر ، ما هو شخص سخيف ما يعادل أوامر SVN التالية:

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

الذي يزيل جميع التغييرات من 295 إلى 302 عن طريق دمج جميع التغييرات في تلك المراجعات ، كالتزام جديد.

svn merge -c -302 ^/trunk

الذي يلفت الانتباه 302 ، بالطبع عن طريق إضافة التزام آخر بأن العكس يدمج التغييرات من هذا الالتزام المعني.

اعتقدت أنها يجب أن تكون عملية بسيطة إلى حد ما في GIT وحالة الاستخدام الشائعة إلى حد ما. ما هو الهدف من الالتزامات الذرية؟

لدينا انطلاق خبأ وكل ذلك لضمان أن تكون الالتزامات ذرية تمامًا ، ألا ينبغي أن تتمكن من التراجع عن واحد أو أكثر من تلك الالتزامات الذرية بسهولة؟

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

المحلول

تحديد تجزئة الالتزام ، باستخدام git log, ، ثم استخدام git revert <commit> لإنشاء التزام جديد يزيل هذه التغييرات. بطريقة، git revert هو عكس git cherry-pick - يطبق الأخير التصحيح على فرع يفتقده ، ويقوم الأول بإزالته من فرع يحتوي عليه.

نصائح أخرى

أنا لا أحب اللوح التلقائي ذلك git revert هل هذا قد يكون مفيدًا للبعض.

إذا كنت تريد فقط الملفات المعدلة وليس اللبلاب التلقائي, ، يمكنك استخدام --no-commit

% git revert --no-commit <commit hash>

وهو نفس -n

% git revert -n <commit hash>

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

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