Jestem nowy w Mercurial. Po prostu nie mogę znaleźć odpowiedniego polecenia. Próbowałem aktualizacji / kasy bez powodzenia. Korzystam z lokalnego repozytorium. Dzięki
@ Omnifarious: Popełniłem stabilną wersję pliku. Następnie kontynuowałem pracę nad plikiem, ale wkrótce zdałem sobie sprawę, że potrzebuję ostatniej „dobrej” wersji. Można to zrobić przez aktualizację w svn, ale kiedy próbuję zaktualizować hg,
pojawia się komunikat
Odpowiedzi:
153
Myślę, że chcesz hg revert -r<rev> <file>(spowoduje to zmianę tego pliku na taki, jaki był w danej wersji).
lub po prostu hg przywróć <nazwa pliku>, jeśli chcesz odrzucić bieżące zmiany i uzyskać najnowsze
zatwierdzone
@BlackTigerX Bez rewizji niezmodyfikowany plik nie zostanie przywrócony do niczego, nawet jeśli nie jest to ostatnio zatwierdzona wersja. Czasami używam tego do `` wybierania '' plików między wersjami, więc jest to ważne.
user2864740
83
Jak powiedział djc, revertzmienia plik w miejscu, aby pasował do poprzedniej wersji. Jeśli chcesz, aby nie było go na miejscu, możesz użyć hg cat -r revisionid filename(oczywiście zastępując identyfikator rewizji i nazwę pliku), co spowoduje wyświetlenie pliku na stdout, odpowiednie do przekierowania w dowolne miejsce.
hg revertrzeczywiście rozwiązuje ten problem. Ale myślę, że jesteś zdezorientowany w szerszym zakresie rzeczy niż zwykła odpowiedź na swoje pytanie i chcesz spróbować odpowiedzieć pełniej.
hg updateto polecenie dotyczące całego repozytorium i nie będzie działać na pojedynczych plikach. W ten sposób nie przypomina wywrotu svn update. Jeśli tak hg --help update, możesz zobaczyć, że tak jest, ponieważ polecenie nie przyjmuje argumentu plikowego. Można go użyć do przeniesienia całego repozytorium do określonej migawki, ale nie można go użyć do zrobienia tego tylko do jednego pliku.
Jeśli wpiszesz hg --help, zobaczysz listę poleceń. Jest to dość obszerna i nieco zniechęcająca lista, ale jeśli ją przeczytasz, znajdziesz następującą linię:
revert restore individual files or directories to an earlier state
Teraz, jeśli chcesz tylko ostatni stan do celów porównawczych, istnieje inne polecenie, które może Cię zainteresować, i to jest hg cat. Umożliwi to wydrukowanie zawartości pliku w dowolnej wersji. Następnie możesz przekierować jego wyjście do innego pliku. Następnie możesz mieć poprzednią znaną dobrą wersję pliku i starszą wersję do porównania obok siebie.
Powodem, dla którego Mercurial ma oddzielne updatepolecenie, jest to, że w Mercurial można zrobić coś, co jest niemożliwe w Subversion. Możesz updatedo wcześniejszej wersji, wprowadzić zmiany, a następnie zatwierdzić. Spowoduje to utworzenie gałęzi. updatePolecenie ma wpływ także zmiany rewizji nadrzędny bieżącego katalogu roboczego, a także zmieniając zawartość wszystkich plików w tym katalogu do wersji rodzic rewizji za.
Oznacza to, że revertzmienia zawartość pliku (lub nawet całego repozytorium, jeśli podasz komendzie odpowiednie argumenty), ale pozostawia tę samą wersję nadrzędną bieżącej kopii roboczej.
Możesz znaleźć wersję nadrzędną (lub wersje w przypadku scalania) bieżącej kopii roboczej za pomocą hg parentspolecenia.
W wersjach Subversion zmiany są ściśle liniowe. Mercurial tworzy gałęzie w mgnieniu oka i prawie tak łatwo je scalić. Rewizje tworzą DAG, a nie ściśle liniową progresję.
Odpowiedzi:
Myślę, że chcesz
hg revert -r<rev> <file>
(spowoduje to zmianę tego pliku na taki, jaki był w danej wersji).źródło
Jak powiedział djc,
revert
zmienia plik w miejscu, aby pasował do poprzedniej wersji. Jeśli chcesz, aby nie było go na miejscu, możesz użyćhg cat -r revisionid filename
(oczywiście zastępując identyfikator rewizji i nazwę pliku), co spowoduje wyświetlenie pliku na stdout, odpowiednie do przekierowania w dowolne miejsce.źródło
hg revert
rzeczywiście rozwiązuje ten problem. Ale myślę, że jesteś zdezorientowany w szerszym zakresie rzeczy niż zwykła odpowiedź na swoje pytanie i chcesz spróbować odpowiedzieć pełniej.hg update
to polecenie dotyczące całego repozytorium i nie będzie działać na pojedynczych plikach. W ten sposób nie przypomina wywrotusvn update
. Jeśli takhg --help update
, możesz zobaczyć, że tak jest, ponieważ polecenie nie przyjmuje argumentu plikowego. Można go użyć do przeniesienia całego repozytorium do określonej migawki, ale nie można go użyć do zrobienia tego tylko do jednego pliku.Jeśli wpiszesz
hg --help
, zobaczysz listę poleceń. Jest to dość obszerna i nieco zniechęcająca lista, ale jeśli ją przeczytasz, znajdziesz następującą linię:Teraz, jeśli chcesz tylko ostatni stan do celów porównawczych, istnieje inne polecenie, które może Cię zainteresować, i to jest
hg cat
. Umożliwi to wydrukowanie zawartości pliku w dowolnej wersji. Następnie możesz przekierować jego wyjście do innego pliku. Następnie możesz mieć poprzednią znaną dobrą wersję pliku i starszą wersję do porównania obok siebie.Powodem, dla którego Mercurial ma oddzielne
update
polecenie, jest to, że w Mercurial można zrobić coś, co jest niemożliwe w Subversion. Możeszupdate
do wcześniejszej wersji, wprowadzić zmiany, a następnie zatwierdzić. Spowoduje to utworzenie gałęzi.update
Polecenie ma wpływ także zmiany rewizji nadrzędny bieżącego katalogu roboczego, a także zmieniając zawartość wszystkich plików w tym katalogu do wersji rodzic rewizji za.Oznacza to, że
revert
zmienia zawartość pliku (lub nawet całego repozytorium, jeśli podasz komendzie odpowiednie argumenty), ale pozostawia tę samą wersję nadrzędną bieżącej kopii roboczej.Możesz znaleźć wersję nadrzędną (lub wersje w przypadku scalania) bieżącej kopii roboczej za pomocą
hg parents
polecenia.W wersjach Subversion zmiany są ściśle liniowe. Mercurial tworzy gałęzie w mgnieniu oka i prawie tak łatwo je scalić. Rewizje tworzą DAG, a nie ściśle liniową progresję.
źródło
Aby wyodrębnić określoną wersję określonego pliku, możesz to zrobić w systemie Windows:
Tutaj 9 to numer wersji.
Albo jeszcze lepiej:
źródło
Przyjechałem tutaj, próbując pobrać poprzednią wersję, więc oto dokładne polecenie:
źródło