2012-10-28 15 views
38

co byłoby równoważne mercurial poleceń (lub workflow) dlaMercurial (hg) równoważne reset git (--mixed lub --soft)

git reset --mixed HEAD^ 

lub

git reset --soft HEAD^ 

tj chcę pozostaw drzewo robocze nienaruszone, ale przywróć repozytorium do stanu sprzed ostatniego zatwierdzenia. Zaskakująco nie znalazłem nic przydatnego na stackoverflow lub w google.

Zauważ, że nie mogę używać

hg rollback 

jak zrobiłem jakąś historię przepisywanie użyciu HistEdit po ostatnim popełnić.

Dodany do wyjaśnienia: Po pewnym podścielanie i historii edycji ja skończyliśmy z < --B < -C. Następnie użyłem HistEdit do zgniatania B i C razem, uzyskując A < - C '. Teraz chcę podzielić commit C '(popełniłem złe pliki w B). Pomyślałem, że najprościej to zrobić, aby przywrócić repozytorium do stanu A (który technicznie nigdy nie istniał w repozytorium z powodu całej zmiany redakcji i historii przed ręką) i działającego drzewa do stanu C ', a następnie do dwóch popełnia.

Odpowiedz

55

Właściwy sposób replikować git reset --soft HEAD^ (aś bieżące popełniają, ale zachować zmiany w kopii roboczej) wynosi:

hg strip --keep -r . 

-1 będzie działać tylko wtedy, gdy popełniają chcesz rozebrać jest bardzo ostatni commit, który wszedł repozytorium. . odnosi się do aktualnie zatwierdzonego zatwierdzenia, które jest najbliższym odpowiednikiem Mercurial do Git's HEAD.

Należy pamiętać, że jeśli . ma potomków, zostaną one również usunięte. Jeśli chcesz zachować zobowiązać się, wtedy gdy masz identyfikator popełnić, można zamiast:

hg update .^ 
hg revert --all -r <commit id> 

Spowoduje to aktualizację do rodzica popełnienia i następnie zastąpić pliki w kopii roboczej z wersjami na to zatwierdzenie.

+0

Uwaga: to wymaga rozszerzenia MQ hg. –

+2

Mercurial 2.8 i nowsze wersje są dostarczane z dedykowanym [strip extension] (https://www.mercurial-scm.org/wiki/StripExtension). – fhd

Powiązane problemy