2015-07-23 12 views
6

Ho avuto il seguente problema TFS:TFS merge non raccoglie rollback di modifiche (s)

ho creato il nuovo ramo dal ramo principale. Durante il tempo alcuni changeset (lasciali specificare da CS-1 a CS-2) sono accaduti sul nuovo ramo. In un momento ho avuto una modifica sul ramo MAIN e questa modifica è stata unita al nuovo ramo (nuovo changeset sul ramo: CS-3).

Successivamente, il nuovo ramo stava avendo più modifiche (che producevano changeset da CS-4 a CS-5). Inoltre, ho eseguito un rollback di CS-3 e come risultato il nuovo changeset CS-6 è stato creato sul nuovo ramo.

Ora, la domanda è: Quali gruppi di modifiche dovrebbero essere contenuti in unione dal nuovo ramo di nuovo al MAIN? Logicamente, dovrebbe essere: [CS-1 - CS-2, CS-4 - CS-5 e CS-6]. Ma, il vero risultato è stato: [CS-1 - CS-2, CS-4 - CS-5]

Qualcuno ha qualche idea: perché l'insieme di modifiche rollback (CS-6) non è contenuta in unione? È ovvio che il rollback del changeset CS-6 non è trattato allo stesso modo del solito changeset.

+0

che cosa si intende l'insieme di modifiche rollback non era contenuta nella stampa unione indietro al ramo principale? TFS non mostrava il conflitto tra CS3 (Main Branch) e CS-6 (da dev/new branch)? – Isaiah4110

+0

No, TFS non ha mostrato il conflitto tra il ramo principale e il nuovo ramo. Inoltre, rispondi alla prima domanda: il changeset che tipo è rollback (CS-6) non è stato suggerito dal TFS per essere unito al ramo MAIN. – Vlada

risposta

6

Prima di tutto, una domanda spiegata molto bene :). L'opzione di cui avete bisogno per iniziare a utilizzare è il "

tf rollback/keepmergehistory

L'esempio seguente illustra le 2 diverse opzioni che possiamo usare mentre si fa rollback, e perché hai il comportamento specifico lei ha citato sopra. ho ricreato l'intero scenario che lei ha citato sopra, ma ho rotolato indietro dal prompt dei comandi utilizzando il

/keepmergehistory

Questa volta, quando ho tentato di unirmi di nuovo dal ramo dev al ramo principale, ha richiamato la modifica rolled-back (CS6) sul ramo sorgente/principale.

Spiegazione da MSDN:

Quando si ripristina un changeset che include un ramo o di un cambiamento di unione, di solito si vuole future unioni tra la stessa fonte e lo stesso obiettivo di includere tali modifiche. Tuttavia, è possibile utilizzare l'opzione/keepmergehistory se si desidera un'unione futura tra la stessa origine e lo stesso target per escludere i changeset che erano racchiusi in un'operazione di unione passata.

Ad esempio, è possibile utilizzare questo comando nella seguente situazione:

  • In data 30 giugno 2009 si esegue una stampa completa di tutti gli elementi da $/BranchA/a $/BranchB/:

    c: \ Area di lavoro> tf merge $/BranchA $/BranchB

il check-in questa fusione come parte di changeset 292.

  • In luglio, si apportano diverse modifiche $/BranchA/Util.cs.Questi cambiamenti sono racchiusi in gruppi di modifiche 297, 301, e 305.
  • Il 1 ° agosto 2009, prova ad unire $/BranchA/Util.cs a $/BranchB/Util.cs:

    c: \ spazio di lavoro > tf merge $/BranchA/Util.cs $/BranchB/Util.cs

il check-nel cambiamento come parte di changeset 314. il risultato di questa operazione è che le modifiche apportate in gruppi di modifiche 297 , 301 e 305 in $/BranchA/Util.cs vengono ora applicati anche a $/BranchB/Util.cs.

  • Una settimana dopo, si rende conto che le modifiche apportate al $/BranchA/Util.cs nel mese di luglio non sono appropriati per $/BranchB/Util.cs. È possibile utilizzare il comando rollback per annullare queste modifiche. Quando si usa il comando di rollback per ripristinare una modifica di unione o una modifica di ramo , è necessario prendere una decisione.
  • Se si desidera che le modifiche apportate nel mese di luglio a $/BranchA/Util.cs per essere ri-applicato a $/BranchB/Util.cs in unioni future, è necessario digitare il seguente comando :

    c: \ area di lavoro> tf rollback/changeset: 314

  • Se si desidera che le modifiche apportate nel mese di luglio a $/BranchA/Util.cs per mai essere ri-applicato a $/BranchB/Util. cs in futuro si unisce, è necessario digitare il seguente comando:

  • c: \ Area di lavoro> tf rollback/changeset: 314/keepmergehistory

  • Poche settimane più tardi, si uniscono $/BranchA/in $/BranchB /: c: \ Area di lavoro> tf merge $/BranchA $/BranchB

  • Se omesso l'opzione/keepmergehistory, il cambiamento di fusione sarà applica ai $/BranchB/Util.cs tutti i gruppi di modifiche che sono state applicate a $/BranchA/Util.cs dal changeset 292, tra cui gruppi di modifiche 297, 301 ,

  • In altre parole, una futura fusione annullerà la modifica del rollback.

  • Se hai incluso l'opzione/keepmergehistory, l'operazione di unione si applicherà a $/BranchB/Util.cs tutti i gruppi di modifiche che sono state applicate a $/BranchA/Util.cs dal changeset 292, ad esclusione di modifiche 297, 301 , e 305. In altre parole, una futura fusione non annullerà la modifica del rollback . Pertanto, il contenuto su BranchA potrebbe non corrispondere al contenuto su BranchB.

MSDN SOURCE

+0

Grazie per la spiegazione dettagliata. Funziona molto bene – Vlada

Problemi correlati