Ci sono aspetti negativi nell'abilitare git rerere?


107

Ho letto varie cose sulla funzione rerere di git e sto considerando di abilitarla. Ma non ho visto nessuno menzionare eventuali problemi che potrebbero sorgere durante l'utilizzo. Devo presumere che ci sia uno svantaggio, o probabilmente sarebbe abilitato per impostazione predefinita. Quindi c'è qualche svantaggio nell'abilitare la rerere? Quali potenziali problemi può causare che altrimenti non si verificherebbero?


Quando la ripetizione automatica è abilitata e applica una risoluzione precedente, viene visualizzato un messaggio? In caso affermativo, che aspetto ha? TIA!
joeytwiddle

1
@joeytwiddle, secondo questo articolo , sarebbe nel formato,Resolved 'index.html' using previous resolution.
sampablokuper

Risposte:


69

Se si esegue un'unione in modo errato, quindi scartarla, quindi eseguire di nuovo la "stessa" unione, sarà di nuovo errata. Puoi dimenticare una risoluzione registrata, però. Dalla documentazione :

git rerere forget <pathspec>

Ciò ripristina le risoluzioni di conflitto registrate nuovamente per il conflitto corrente in <pathspec>.

Fai attenzione ad usarlo su percorsi specifici; non vuoi spazzare via tutte le risoluzioni registrate ovunque. ( forgetsenza argomenti è stato deprecato per impedirti di farlo, a meno che non digiti git rerere forget .per richiederlo esplicitamente.)

Ma se non pensi di farlo, potresti facilmente finire per inserire quella fusione errata nella tua storia ..


13
Questo è il motivo per cui rererelascia ancora i file con conflitti contrassegnati come non uniti, quindi devi aggiungerli manualmente (si spera dopo averli ispezionati / testati) prima di eseguire il commit. Puoi sempre utilizzare git checkout -m <path>per controllare la versione originale in conflitto e ripetere la risoluzione se necessario.
Cascabel

1
Avrebbe senso! Sembra che tu abbia bisogno di un nuovo alias.
Cascabel

5
Penso che questo sia probabilmente il problema principale. L'abilitazione di rerere aggiunge un altro modo in cui gli errori si intrufolano in modo imprevisto. Un'unione che interrompi (o meglio annulli cancellandola dalla cronologia) potrebbe comunque tornare a perseguitarti in seguito. Fondamentalmente, introduce un secondo meccanismo di cronologia ortogonale al grafico storico effettivo.
Ryan C. Thompson

3
@RyanThompson Le unioni interrotte non influiscono sul rerere. (Spesso vorrei che lo facessero: a volte ho interrotto un'unione perché l'ho impostata in modo sbagliato, quindi dovevo fare le stesse identiche risoluzioni quando l'ho impostata correttamente.) Per quanto riguarda l'eliminazione di un'unione dalla cronologia, perché dovresti mai Fai quello?
Marnen Laibow-Koser

40

Come cita JC Hamano nel suo articolo " Fun with rerere "

  • Rerere ricorda come hai scelto di risolvere le regioni in conflitto;
  • Rerere ricorda anche come hai ritoccato al di fuori delle regioni in conflitto per adattarti ai cambiamenti semantici;
  • Rerere può riutilizzare la risoluzione precedente anche se stavi unendo due rami con contenuti diversi da quello risolto in precedenza .

Anche le persone che usano rerere da molto tempo spesso non riescono a notare l'ultimo punto.

Quindi, se attivi rerereun contenuto troppo ampio, potresti finire con una risoluzione di unione sorprendente o confusa a causa dell'ultimo punto.


15
I fusti in conflitto devono ancora corrispondere; è abbastanza difficile dare un falso positivo.
Cascabel

3

Ho rerere globalmente abilitato. Non ho davvero notato alcun problema e di solito sembra rendermi la vita più facile.


4
Anch'io. Nessun problema in 2+ anni di utilizzo.
Andrey Tarantsov

3

Ho scelto un commit (in gitk) che conteneva solo un file binario. Cherrypick non è riuscito a causa di un conflitto (il che è naturale) e ho risolto il conflitto mantenendo la scelta migliore. In seguito sono stato sorpreso di scoprire in un altro ramo ribasato che le mie dll non si sono comportate - solo per scoprire che non sono state trasportate nel rebase come (ipotizzo) risoluzione automatica dei conflitti. Quindi questo è l'unico caso che ho incontrato (avendo rerere abilitato) di imbattersi in un comportamento controintuitivo (anche se sono sicuro perfettamente coerente).


1
Cura:git rerere forget path/to/compiled/bin.dll
Mr_and_Mrs_D

Nel caso originale ho ottenuto il conflitto non sulla selezione delle ciliegie ma sul ribasamento, ma non credo che faccia differenza
Mr_and_Mrs_D
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.