Supponiamo che example.css
assomigli a questo:
.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;
}
Ora cambiamo i selettori di stile nel blocco centrale e, mentre ci siamo, eliminiamo qualche vecchio stile commentato che non ci serve più.
.classname {
width: 440px;
}
#user-register form.table-form .field-type-checkbox label {
width: 300px;
}
.another {
width: 420px;
}
È stato facile, ora impegniamoci. Ma aspetta, voglio mantenere la separazione logica delle modifiche nel controllo della versione per una semplice revisione del codice passo-passo e in modo che io e il mio team possiamo facilmente cercare nella cronologia di commit specifiche.
L'eliminazione del vecchio codice è logicamente separata dall'altra modifica del selettore di stile. Avremo bisogno di due commit distinti, quindi aggiungiamo hunk per una patch.
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,?]?
Spiacenti, sembra che i cambiamenti siano troppo vicini, quindi Git li ha raggruppati insieme.
Anche provare a dividerlo premendo sha lo stesso risultato perché la divisione non è abbastanza granulare per le nostre modifiche di precisione. Sono necessarie linee invariate tra le linee modificate per consentire a git di dividere automaticamente la patch.
Quindi, cerchiamo di manualmente modificare premendoe
Stage this hunk [y,n,q,a,d,/,e,?]? e
git aprirà la patch nel nostro editor preferito.
# 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.
Rivediamo l'obiettivo:
Come posso aggiungere la rimozione dei commenti CSS solo al prossimo commit?
Vogliamo dividerlo in due commit:
Il primo commit comporta l'eliminazione di alcune righe (rimozione dei commenti).
Per rimuovere le righe commentate, lasciarle da sole, sono già contrassegnate per tenere traccia delle eliminazioni nel controllo versione proprio come vogliamo.
-/*#field_teacher_id {
- display: block;
-} */
Il secondo commit è una modifica, che viene tracciata registrando sia le eliminazioni che le aggiunte:
Eliminazioni (vecchie righe di selezione rimosse)
Per mantenere le vecchie linee di selezione (non cancellarle durante questo commit), vogliamo ...
Per rimuovere le righe "-", crearle ""
... che significa letteralmente sostituire i -
segni meno con un
carattere spaziale .
Quindi queste tre linee ...
-
-form.table-form #field_teacher + label,
-form.table-form #field_producer_distributor + label {
... diventerà ( notare il singolo spazio nella prima di tutte e 3 le righe):
form.table-form #field_teacher + label,
form.table-form #field_producer_distributor + label {
Aggiunte (aggiunta nuova linea di selezione)
Per non prestare attenzione alla nuova linea di selezione aggiunta durante questo commit, vogliamo ...
Per rimuovere le righe "+", eliminale.
... che significa letteralmente eliminare l'intera riga:
+#user-register form.table-form .field-type-checkbox label {
(Bonus: se ti capita di usare vim come editor, premi ddper eliminare una riga. Gli utenti Nano premono Ctrl+ K)
Il tuo editor dovrebbe apparire così quando salvi:
# 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.
Ora impegniamoci.
git commit -m "remove old code"
E solo per essere sicuri, vediamo le modifiche dall'ultimo commit.
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 {
Perfetto: puoi vedere che solo le eliminazioni sono state incluse in quel commit atomico. Ora finiamo il lavoro e impegniamo il resto.
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;
}
Finalmente puoi vedere che l'ultimo commit include solo le modifiche al selettore.