2012-03-08 14 views
22

Mam sytuacja tak:Jak uncommit w Mercurial dla mojego ostatniego zatwierdzenia (jeszcze popchnął)

mam popełnione pliki a, b, c, d.Now i stwierdził, że przez pomyłkę popełnił pliki a i b; więc przed wprowadzeniem tych zmian chcę wykonać nieautoryzowane pliki aib, aby można było wciskać tylko c i d. Czy ktoś może mi powiedzieć, jak to zrobić, używając poleceń rtęciowych.

Tutaj oznacza uncommit że dunt chcesz użyć „hg się -p” i po tej patrząc zmiany ustaw i robić rzeczy ręcznie.

+0

Porównując to i pytanie oznaczone jako duplikat, jasne jest, że jest to inna sytuacja z inną odpowiedzią. Zamiast próbować usunąć zestaw zmian, chcemy go przekonwertować na zestaw niezatwierdzonych zmian w pliku z zamiarem utworzenia nowego, zmienionego zestawu zmian. – AWrightIV

Odpowiedz

37

Zakładając, że nie przeprowadzono żadnych innych operacji na repozytorium ponieważ popełnione pliki, myślę, że można zrobić to jako proces 2 etap:

hg rollback 
hg commit filec filed 

hg rollback powinny usunąć zobowiązują się, że masz tylko wykonane, ale pozostaw pliki jako zmienione. Następnie hg commit filec filed powinien zatwierdzić pliki o nazwie filec & filed. Oczywiście należy zastąpić te nazwy plików nazwami rzeczywistych plików.

Warto wspomnieć, że należy zachować ostrożność przy hg rollback - zmienia to historię, więc można z niej utracić dane, jeśli są niewłaściwie używane.

+6

Przywracanie jest przestarzałe i oznaczone jako niebezpieczne. Prostym sposobem na "nieautoryzowanie" ostatniego zatwierdzenia jest użycie hg strip -r -1 -k. – phb

+4

Ponieważ ludzie dali mi -1 za ten komentarz. Oto dokumentacja, która tworzy kopię zapasową mojego roszczenia: https://www.mercurial-scm.org/repo/hg/help/rollback – phb

+1

W przypadku zerwania łącza dokumentacja wspomniana przez @phb stwierdza: _ [hg rollback] (https://www.mercurial-scm.org/repo/hg/help/rollback) Wycofanie ostatniej transakcji (NIEBEZPIECZNE) (ODRADZANE) Użyj polecenia "hg commit --amend" zamiast wycofywania, aby poprawić błędy w ostatnim zatwierdzeniu ._ Ważne jest, że 'hg commit --amend' jest zalecaną alternatywą! – AWrightIV

3

W Mercurial można użyć polecenia backout, który tworzy changeset który jest przeciwieństwem changeset chcesz wycofał się. Następnie ten zestaw zmian zostaje zatwierdzony. Jedyne, co musisz zrobić po tym, to połączenie.

Możesz wycofać wszystkie zestawy zmian, ale nie zaleca się wycofywania zestawu zmian scalania.

Szczegółowe wyjaśnienie polecenia z przykładem można znaleźć here.

+0

Jest to bardzo przydatne dla tych czasów, że wycofanie nie będzie działać, ponieważ '' '--amend''''s commit. –

Powiązane problemy