[Git] هل يمكنني تقسيم قطعة مقسمة بالفعل مع بوابة؟


Answers

لنفترض أن example.css يبدو كالتالي:

.classname {
  width: 440px;
}

/*#field_teacher_id {
  display: block;
} */

form.table-form #field_teacher + label,
form.table-form #field_producer_distributor + label {
  width: 300px;
}

.another {
  width: 420px;
}

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

.classname {
  width: 440px;
}

#user-register form.table-form .field-type-checkbox label {
  width: 300px;
}

.another {
  width: 420px;
}

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

حذف الشفرة القديمة منفصل منطقياً عن تغيير محدد النمط الآخر. سنحتاج إلى إلتزامين مختلفين ، لذا دعنا نضيف الكتل لاصلاحها.

git add --patch
diff --git a/example.css b/example.css
index 426449d..50ecff9 100644
--- a/example.css
+++ b/example.css
@@ -2,12 +2,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

Stage this hunk [y,n,q,a,d,/,e,?]?

عفوًا ، يبدو أن التغييرات قريبة جدًا من الصورة ، لذا فقد قام Git بتجميعها معًا.

حتى محاولة تقسيمه بالضغط على s له نفس النتيجة لأن الانقسام ليس دقيقًا بما يكفي لإجراء تغييرات دقيقة. يلزم تغيير الخطوط غير المعدلة بين السطور المتغيرة لـ git لتتمكن من تقسيم التصحيح تلقائيًا.

لذا ، لنقم بتحريره يدويًا بالضغط على e

Stage this hunk [y,n,q,a,d,/,e,?]? e

سوف git فتح التصحيح في محررنا المفضل.

# Manual hunk edit mode -- see bottom for a quick guide
@@ -2,12 +2,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging. If it does not apply cleanly, you will be given
# an opportunity to edit again. If all lines of the hunk are removed,
# then the edit is aborted and the hunk is left unchanged.

لنراجع الهدف:

كيف يمكنني إضافة إزالة تعليق CSS فقط إلى الالتزام التالي؟

نريد تقسيم هذا إلى قسمين:

  1. الالتزام الأول ينطوي على حذف بعض الخطوط (إزالة التعليق).

    لإزالة الخطوط التي تم التعليق عليها ، اتركها بمفردها ، تم وضع علامة عليها بالفعل لتتبع عمليات الحذف في التحكم في الإصدار تمامًا كما نرغب.

    -/*#field_teacher_id {
    - display: block;
    -} */

  2. الالتزام الثاني هو تغيير ، يتم تعقبه من خلال تسجيل كل من الحذف والإضافات:

    • الحذف (إزالة خطوط المنتقى القديمة)

      للحفاظ على خطوط المحدد القديم (لا تحذفها خلال هذا الالتزام) ، نريد ...

      لإزالة الأسطر "-" ، اجعلها ""

      ... والتي تعني حرفيا استبدال علامات الطرح بمسافة حرف.

      هذه الخطوط الثلاثة ...

      -
      -form.table-form #field_teacher + label,
      -form.table-form #field_producer_distributor + label {

      ... سيصبح ( لاحظ المساحة الفردية في أول 3 سطور):


      form.table-form #field_teacher + label,
      form.table-form #field_producer_distributor + label {

    • إضافات (خط محدد جديد مضاف)

      لعدم الانتباه إلى خط التحديد الجديد الذي تمت إضافته خلال هذا الالتزام ، نريد ...

      لإزالة الأسطر "+" ، احذفها.

      ... والتي تعني حرفيًا حذف السطر بالكامل:

      +#user-register form.table-form .field-type-checkbox label {

      (مكافأة: إذا كنت تستخدم نانو كمحرر ، فإن اختصار لوحة المفاتيح لحذف خط هو Ctrl + K )

يجب أن يظهر محررك على هذا النحو عند الحفظ:

# Manual hunk edit mode -- see bottom for a quick guide
@@ -2,12 +2,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */

 form.table-form #field_teacher + label,
 form.table-form #field_producer_distributor + label {
   width: 300px;
 }

# ---
# To remove '-' lines, make them ' ' lines (context).
# To remove '+' lines, delete them.
# Lines starting with # will be removed.
#
# If the patch applies cleanly, the edited hunk will immediately be
# marked for staging. If it does not apply cleanly, you will be given
# an opportunity to edit again. If all lines of the hunk are removed,
# then the edit is aborted and the hunk is left unchanged.

الآن لنرتكب

git commit -m "remove old code"

وللتأكد فقط ، دعنا نرى التغييرات من الالتزام الأخير.

git show
commit 572ecbc7beecca495c8965ce54fbccabdd085112
Author: Jeff Puckett <jeff@jeffpuckett.com>
Date:   Sat Jun 11 17:06:48 2016 -0500

    remove old code

diff --git a/example.css b/example.css
index 426449d..d04c832 100644
--- a/example.css
+++ b/example.css
@@ -2,9 +2,6 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */

 form.table-form #field_teacher + label,
 form.table-form #field_producer_distributor + label {

مثالي - يمكنك أن ترى أنه تم تضمين عمليات الحذف فقط في هذا الالتزام الذري. الآن دعونا ننهي المهمة ونلتزم بالباقي.

git add .
git commit -m "change selectors"
git show
commit 83ec3c16b73bca799e4ed525148cf303e0bd39f9
Author: Jeff Puckett <jeff@jeffpuckett.com>
Date:   Sat Jun 11 17:09:12 2016 -0500

    change selectors

diff --git a/example.css b/example.css
index d04c832..50ecff9 100644
--- a/example.css
+++ b/example.css
@@ -2,9 +2,7 @@
   width: 440px;
 }

-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

وأخيرًا ، يمكنك الاطلاع على آخر التزام يتضمن فقط تغييرات المحدّد.

Question

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

على سبيل المثال ، ضع في اعتبارك هذا الجزء المقسم بالفعل:

@@ -34,12 +34,7 @@
   width: 440px;
 }

-/*#field_teacher_id {
-  display: block;
-} */
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
+#user-register form.table-form .field-type-checkbox label {
   width: 300px;
 }

كيف يمكنني إضافة إزالة تعليق CSS فقط إلى الالتزام التالي؟ خيار s غير متوفر بعد الآن!




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

إذا كنت قلقًا بشأن ترتيب الالتزام ، فاستخدم git rebase -i .




Links