2012-03-08 11 views
22

ho situazione come questa:Come uncommit in Mercurial per il mio ultimo commit (non ancora spinto)

ho impegnato i file a, b, c, d.Now ho scoperto che per errore ho commesso file aeb; quindi, prima di spingere questi cambiamenti, voglio disabilitare i file aeb in modo che io possa spingere solo c e d. Qualcuno può dirmi come fare a fare usando comandi mercuriali.

Qui uncommit significa che i dunt voglio usare "hg fuori -p" e dopo che cercando cambiamento impostare e fare le cose manualmente.

+0

Confrontando questo e la domanda contrassegnata con un duplicato, è chiaro che questa è una situazione diversa con una risposta diversa. Piuttosto che cercare di eliminare un changeset, vogliamo convertirlo in un insieme di modifiche di file non salvate con l'intenzione di creare un nuovo changeset modificato. Il riepilogo – AWrightIV

risposta

37

Supponendo di non aver effettuato altre operazioni sul repository dal momento che hanno commesso il file, credo che si potrebbe fare questo come un processo in 2 fasi:

hg rollback 
hg commit filec filed 

hg rollback dovrebbe rimuovere il commit che basta fatto, ma lascia i file come modificati. Quindi hg commit filec filed dovrebbe impegnare i file denominati filec & filed. Ovviamente dovresti sostituire questi nomi di file con i nomi dei tuoi file attuali.

Vale la pena ricordare che è necessario fare attenzione con hg rollback - altera la cronologia, quindi è possibile perdere dati con essa se usata in modo errato.

+6

è obsoleto e contrassegnato come pericoloso. Un modo semplice per "non accettare" l'ultimo commit è usare hg strip -r -1 -k. – phb

+4

Poiché la gente mi ha dato un -1 per quel commento. Ecco la documentazione che esegue il backup della mia richiesta: https://www.mercurial-scm.org/repo/hg/help/rollback – phb

+1

Nel caso in cui il link si interrompa, la documentazione menzionata da @phb afferma: _ [rollback hg] (https://www.mercurial-scm.org/repo/hg/help/rollback) Ripristina l'ultima transazione (PERICOLO) (DEPRECATO) Utilizza 'hg commit --amend' invece di rollback per correggere gli errori nell'ultimo commit ._ Importante, 'hg commit --amend' è l'alternativa raccomandata! – AWrightIV

3

in Mercurial è possibile utilizzare il comando backout, che crea un changeset che è l'opposto del changeset che si desidera fatto da parte. Quindi questo changeset è impegnato. L'unica cosa che devi fare dopo è un'unione.

È possibile eseguire il backout di qualsiasi changeset, ma non è consigliabile eseguire il backout di un changeset di unione.

Una spiegazione dettagliata del comando con un esempio può essere trovata here.

+0

Questo è veramente utile per quelle volte in cui il rollback non funziona perché "" - "ammesso" il commit. –

Problemi correlati