2013-04-17 17 views
9

Wydałem hg qnew, nie zdając sobie sprawy, że zawiera ona wszelkie zaległe zmiany w poprawce. Chciałbym to potwierdzić i wybrać tylko określone zmiany za pomocą hg qrecord. Jak mogę cofnąć qnew?Jak cofnąć "hg qnew"?

Odpowiedz

12

Twoja odpowiedź na pewno działa - z nowszych Mercurial może użyć hg strip --keep aby uniknąć robi krok importowania:

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

Flaga --keep powoduje, że pasek zignoruje działającą kopię podczas pracy, to znaczy usuwa commit (jak zrobiłby to hg qpop), ale nie cofa zmian w plikach . Po rozebraniu masz jeszcze łatkę z serii (bez użycia), którą możesz następnie usunąć.

2

Znalazłem się anwer here:

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

dodaj lepszy sposób, jeśli wiesz.

Aktualizacja: W oparciu o odpowiedź Aldo, istnieje inny sposób:

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

Jeśli chcesz po prostu cofnąć ostatni qnew oporowych wszystkich zmian, jedna opcja:

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

Uwaga, 123 to tylko przypadkowy ciąg: mówisz mercurial tylko zawierać (oby nonexistsnt) 123 plik w aktualnej poprawce. Nowsze wersje Mercurial Po wydaniu zostanie wyświetlone ostrzeżenie o tym, że plik 123 nie istnieje, ale jest to dokładnie to, czego chcemy tutaj.

Jeśli chcesz zachować niektóre zmiany w bieżącej ścieżce, można użyć komendy qcrefresh z crecordextension, co pozwala wybrać graficznie zmiany mają zostać uwzględnione w aktualnym patchem. Trzeba download go z Bitbucket, rozpakować archiwum i skonfigurować go w .hgrc:

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

To rozszerzenie wydaje się bardzo obiecująca, a jako użytkownik darcs Lubię ten sposób wybierając zmian interaktywnie. Jednak nie odpowiada na moje pytanie - musiałem cofnąć "qnew", co już się wydarzyło. –

+0

Jeśli dobrze rozumiem twoje pytanie, w rzeczywistości nie musisz cofać 'qnew': możesz bezpośrednio użyć komendy' qcrefresh', aby wykluczyć zmiany, które nie zostały dołączone. Wykluczone zmiany pozostaną zmianami lokalnymi, więc po 'qcrefresh' możesz uwzględnić je wszystkie w nowej poprawce za pomocą' qnew' lub nawet użyć 'qcrecord' tylko do wybrania ich podzbioru. – Aldo

+0

Być może po prostu nie rozumiem, jak prawidłowo korzystać z rozszerzenia. Czy mógłbyś dodać serię poleceń zaczynając od 'hg qnew' na zmodyfikowanym repozytorium, które kończy się tak, jakby' qnew' nigdy nie został wywołany? Próbowałem tego używając 'qrefresh' przedtem (co, jak przypuszczam, robi to samo, co' qcrefresh', tylko nieinteraktywnie), ale bez powodzenia. –