2013-04-17 12 views
9

Ho emesso hg qnew senza rendermi conto che include eventuali modifiche in sospeso nella patch. Mi piacerebbe confermarlo e scegliere solo modifiche specifiche usando hg qrecord. Come posso annullare qnew?Come annullare "hg qnew"?

risposta

12

La risposta sicuramente funziona - con le nuove Mercurial è possibile utilizzare hg strip --keep per evitare di fare il passo di importazione:

$ hg strip --keep . 
$ hg qdelete patch-name 

Il flag --keep fa striscia ignorare la copia funzionante mentre lavora, ovvero elimina il commit (come farebbe hg qpop) ma non annulla le modifiche ai file . Dopo averlo rimosso, hai ancora la patch della serie (non applicata) e puoi eliminarla.

2

Ho trovato un Anwer here:

hg qpop 
hg import --no-commit .hg/patches/patch-name 
hg qdelete patch-name 

Si prega di aggiungere un modo migliore, se si sa.

Aggiornamento: in base alla risposta di Aldo, c'è un altro modo:

hg qnew test 
# We can undo the above qnew as: 
hg qrefresh -X '*' 
hg qpop -f 
hg qdelete test 
2

Se si desidera solo per annullare le ultima qnew mantenendo tutte le modifiche locali, una possibilità è:

qcrefresh 123 
hg qpop -f 
hg qdelete <name of the patch> 

noti che 123 è solo una stringa casuale: si sta dicendo a Mercurial di comprendere solo la (si spera nonexistsnt) 123 nella patch corrente. Versioni più recenti di Mercurial Quando si emette un avviso sul fatto che il file 123 non esiste, ma questo è esattamente ciò che vogliamo qui.

Se si desidera mantenere alcuni dei cambiamenti nel percorso corrente, è possibile utilizzare il comando qcrefresh dal crecordextension, che permette di selezionare graficamente le modifiche da includere nella patch corrente. È necessario download da Bitbucket, estrarre l'archivio e configurarlo in .hgrc:

[extensions] 
crecord = <path/to/crecord/package> 
+0

Questa estensione sembra molto promettente, e come utente darcs mi piace questo modo di selezionare le modifiche in modo interattivo. Tuttavia, non risponde alla mia domanda: avevo bisogno di annullare 'qnew' che è già successo. –

+0

Se capisco bene la tua domanda, in realtà non hai bisogno di annullare il 'qnew': puoi usare direttamente il comando' qcrefresh' per escludere le modifiche che non dovevano essere incluse. Le modifiche escluse rimarranno come modifiche locali, quindi dopo 'qcrefresh' puoi includerle tutte in una nuova patch con' qnew' o anche usare 'qcrecord' per selezionare solo un sottoinsieme di esse. – Aldo

+0

Forse non capisco come usare correttamente l'estensione. Potresti aggiungere una serie di comandi che iniziano con "hg qnew" su un repository modificato, che termina come se "qnew" non sia mai stato invocato? Ho provato a farlo usando 'qrefresh' prima (che suppongo fa la stessa cosa di' qcrefresh', solo in modo non interattivo), ma senza successo. –