mia domanda è questa:Come unire per liberare la testa con la linea di comando di Mercurial, come posso fare con TortoiseHg?
- Se ho due teste (rami con variazioni) nel mio repository Mercurial, e mi piacerebbe per sbarazzarsi di uno di loro, ma scartare tutte le modifiche da quel ramo invece di fonderli nell'altro, e non posso escludere quei changeset quindi devo unirmi, come posso farlo con il client della riga di comando?
Se ho due teste nel mio repository Mercurial, e utilizzare TortoiseHg come il mio cliente, il repository potrebbe assomigliare a questo:
Poi mi può sbarazzarsi del test2
testa facendo una fusione e scartando. In primo luogo vorrei aggiornare alla testa che vorrei mantenere (test3
in questo caso, che nell'immagine sopra è già l'attuale genitore della mia cartella di lavoro). Poi vorrei fare clic destro e selezionare "Unisci con ...":
e, nella finestra che si apre avrei scelto di ignorare le modifiche della destinazione di unione (cioè il ramo I'. d come per scartare tutte le modifiche da):
Dopo questa unione è passato attraverso, tutti i cambiamenti nella testa test2
è stato scartato, e posso commettere. La testa è ora scomparsa, ma il changeset fa ancora parte della storia.
La mia domanda è questa: come posso fare la stessa cosa usando solo il client della riga di comando? Non riesco a trovare tutte le opzioni corrispondenti al comando hg merge
:
hg merge [-P] [-f] [[-r] REV] merge working directory with another revision ... snipped text options: -f --force force a merge with outstanding changes -t --tool VALUE specify merge tool -r --rev REV revision to merge -P --preview review revisions to merge (no merge is performed) --mq operate on patch repository use "hg -v help merge" to show global options
Edit: debugsetparents lavorato bene:
hg debugsetparents . 1 hg commit -m "merged to get rid of changeset #1"
Edit: Tentativo di utilizzare il secondo
--tool internal:local
a una delle risposte:
@echo off
setlocal
if exist repo rd /s /q repo
hg init repo
cd repo
rem revision 0
echo >test1.txt
hg commit -m "test1" --addremove
rem revision 1
echo >test2.txt
hg commit -m "test2" --addremove
rem revision 2
hg update 0
echo >test3.txt
hg commit -m "test3" --addremove
rem now let's get rid of change in revision 1 with merge
hg merge --tool internal:local -r 1
hg commit -m "merged"
dir
uscita di esecuzione:
[C:\Temp] :test adding test1.txt adding test2.txt 0 files updated, 0 files merged, 1 files removed, 0 files unresolved adding test3.txt created new head 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) Volume in drive C is unlabeled Serial number is 0e17:6aba Directory of C:\Temp\repo\* 16.11.2010 20:05 . 16.11.2010 20:05 .. 16.11.2010 20:05 .hg 16.11.2010 20:05 13 test1.txt 16.11.2010 20:05 13 test2.txt 16.11.2010 20:05 13 test3.txt 39 bytes in 3 files and 3 dirs 12 288 bytes allocated 66 600 316 928 bytes free
Qui le modifiche introdotte nel 2 ° changeset (quello con numero di revisione 1), è ora presente nel changeset unito. Questo non è quello che volevo.
'hg debugsetparents. REV2' seguito da un 'hg merge' ha funzionato bene, grazie. –
Molto utile per uno sviluppatore iOS, abbiamo utilizzato MacHG che non supporta la funzionalità "Elimina tutte le modifiche dalla revisione della destinazione di fusione (altro)". –
Solo per il mio riferimento (come sono spesso qui, cercando di ricordarlo): si vuole eseguire 'hg debugsetparents'. Questo può essere dedotto dai documenti di aiuto ma non è esattamente * ovvio *. –