2014-05-23 15 views
6

Ho accidentalmente sovrascritto le modifiche di un altro sviluppatore durante l'unione in git. So come fare undo the last commit, cioè la mia unione.modifica di un commit Git già spinto

Il mio problema è che ho già inserito tali commit nel nostro repository online. Quindi, se torno indietro, la mia unione si unisce di nuovo (con le sue modifiche questa volta) e prova a spingerla di nuovo, ci sarà un conflitto (giusto?). Qual è il modo giusto per gestire questo?

EDIT Per chiarire, qui è quello che la situazione si presenta così:

commit A --- commit B --- merge 

Ma nell'unione sbaglio ho scartato le modifiche apportate a commettere A. Questo non è davvero un problema. So come apportare le modifiche localmente (annulla l'unione). Ma il il mio problema è che il tutto è stato inserito nel nostro repository condiviso (si pensi a github o bitbucket).

+1

Osservare che "modificare una revisione" è in realtà "eliminare una revisione e aggiungere una nuova revisione diversa". –

+2

Questo non sembra un duplicato della domanda suggerita. Il suggerimento riguarda il ripristino di una modifica locale, ma l'OP qui sta chiedendo di riportare un repository remoto a uno stato precedente. – Caleb

+0

@Caleb grazie, questo è esattamente quello. Ho fatto una modifica per cercare di spiegare ulteriormente, ma questa è l'idea. Avrei dovuto aggiungere, sono un idiota no. – nha

risposta

4

Per impostazione predefinita, i server remoti non consentono la sovrascrittura di commit già inviati. Questo perché quei nuovi commit sono oggetti diversi che sono incompatibili con quelli pubblicati prima. Ciò significa che chiunque abbia già recuperato dal telecomando, avrà gravi problemi a risolverlo una volta sovrascritto il commit. Quindi dovresti davvero riconsiderare la sovrascrittura del commit con qualcos'altro. Notare che git revert funziona anche con commit di unione, quindi è preferibile considerarlo.

Detto questo, è ancora possibile inviare il commit riscritto anche se è in conflitto con ciò che è presente sul server. Puoi farlo spingendo con forza utilizzando git push --force o git push -f in breve.

+0

Non sono sicuro di aver capito 'git revert'. Sarò in grado di inviare al repository e non è successo niente? O aggiunge un commit che è l'esatto opposto dell'ultimo? Hai un'opinione su 'git revert' vs' git cherry-pick'? – nha

+0

Sì, 'git revert' aggiungerà un nuovo commit che annulla i commit selezionati. Quindi spingendolo funzionerà poiché non * rimuoverà * alcun commit già pubblicato. – poke

+0

grazie! Accetterò la tua risposta, ma ti ho anche svalutato @musicmatze. (Sarei felice di sentire un'opinione sui rispettivi meriti di entrambe le opzioni) – nha

Problemi correlati