Cum de a elimina încredințarile de la origine

Un caz real. Un dezvoltator a fuzionat cu trei sucursale de master task5 c sarcină și a trimis la magazia în origine / master. 3 zile mai târziu, un alt dezvoltator începe să se pregătească eliberarea, este această ramură a expertului și înțelege că acest expert ramură task5 nu poate rula afară. Aceste comiterile pe care doriți să îl eliminați, și ramura task5 înapoi pentru revizuire.

Git Navali împinge -f

Totul este complicată de faptul că task5 se află în expertul timp de 3 zile și de alți dezvoltatori pot actualiza stăpânii lor locale și de a obține acest task5 nefericit la stăpânul său și brațul lui nou creat, o ramură a expertului. Acest lucru înseamnă că, dacă tocmai ați elimina și rescrie istoria încredințarile prin git împinge -f. atunci orice dezvoltator care are podsosal le schimba din nou împinge la server, fără să știe.

Să Revocați git

În plus, după cum am scris mai sus, există o îmbinare-comite, care trebuie de asemenea să fie anulate. O îmbinare dezangaja, este cunoscut de a avea doi părinți, și o comite nu se poate pur și simplu anula comanda git reveni. ca o normală comite. Ai nevoie să-ți spun în mod explicit ceea ce este un părinte dorim să anulați:

Și subtilitate aici este că în cazul în care dezvoltatorul drenaj sucursale a permis unor conflicte, în scopul de a anula îmbinarea, aceste conflicte ar trebui să fie rezolvate în ordine inversă. Ca urmare, câteva ore mai târziu, nu am reuși folosind git reveni la ramura din dreapta a statului, tot timpul au existat unele diferente.

În final, o soluție a fost găsită la cireșe aleg. În primul rând, noi încă suprascrie master:

După aceea, toate ramurile tuturor dezvoltatorilor care conțin angajează nevoie task5 să recreeze. Fiecare dezvoltator actualizează re-înregistrarea master: git fetch

Este o listă de comiterile în ramura lor:

După aceea, vom găsi încredințarile care au făcut dezvoltator în ramura curentă (primele trei se angajeze în situația noastră se va task5 de sucursale), și a le transfera într-o ramură separată.

în plus

Ia-o listă de ramuri care trebuie să fie actualizate (ca o listă de hash-uri de comiterile din care vom scăpa):

Lista comiterile în ramura curentă separate printr-un spațiu:

Dezavantajele acestei metode sunt că ar trebui să fie făcut în fiecare dezvoltator, cu toate ramurile sale. Dacă cineva nu, sau va fi dor de ramura, apoi se împinge mai târziu, în condiții de siguranță modificări master.