Zgrzyt w bajkowym świecie Gita
Dziś bardzo krótko. Jak kiedyś wspominałem, nie jestem zaawansowanym Git-użytkownikiem i czasami, gdy przyjdzie wykonać jakąś nową, bardziej skomplikowaną operację, najpierw czytam jak to zrobić na StackOverlow, a potem mam zagwozdkę – czy aby na pewno dobrze to zrozumiałem?
Szczególnie mocno zastanawiam się przed próbami wdrożenia znalezionego rozwiązania, gdy w grę wchodzi polecenie typu git reset –hard 🙂
Tak było i ostatnio. Pracowałem sobie spokojnie na gałęzi roboczej („Feature”) i miałem kilka lokalnych commitów (od C2 do C6). Z pewnych względów okazało się, że owa lokalna praca ma się znaleźć nie na zdalnej gałęzi razem z pozostałymi, ale raczej muszę ją przenieść do nowej gałęzi („Test”).
Gdy wpisałem w Google pierwsze słowa zdania „git move local commits to another branch” od razu widziałem, że to dość częsty i szeroko omówiony problem. Pierwsze linki podały gotowe rozwiązanie, czyli:
- git checkout -b Test
- git checkout Feature
- git reset –hard C1
Ostatni krok jednak zapalił w mojej głowie czerwoną lampkę – jak każdy niedoświadczony użytkownik, boję się tego co potencjalnie może spowodować jakieś problemy 🙂 Oczywiście zdaję sobie sprawę, że najprawdopodobniej proponowane rozwiązanie jest poprawne, ale jest jeszcze kwestia zrozumienia – czy aby na pewno poprawnie odczytałem odpowiedzi.
Piaskownica na ratunek
W takich przypadkach bardzo przydaje się jakieś środowisko testowe, w którym można sprawdzić co się rzeczywiście stanie. Takim środowiskiem może być własne testowe repozytorium – mam takie u siebie, ale można też skorzystać z gotowych rozwiązań, co najczęściej jest szybsze (szczególnie w tak prostych przypadkach). Takim gotowym rozwiązaniem jest ta strona. Oferuje ona przede wszystkim interaktywny samouczek gita. Podzielony on jest na lekcje, które bardzo fajnie wprowadzają w to środowisko. Dodatkowo jednak można jej użyć w takich przypadkach jak powyższy. Po prostu przechodzisz na stronę, dwa razy escape i masz gotową do zabawy piaskownicę 🙂 Oto wynik moich zabaw:
Czyli dokładnie to, o co mi chodziło – zrozumiałem odpowiedź poprawnie i teraz bezpiecznie mogłem przeprowadzić tę operację na repozytorium.
A może własne środowisko testowe?
I jeszcze słowo na koniec – tak naprawdę Git jest bezpieczny i bez tego wszystkiego. Bez złej woli naprawdę ciężko jest tu coś mocno zepsuć, więc być może moje obawy są bezpodstawne, ale wolę mieć świadomość, że żadna historia moich prób i błędów nie zostanie zapisana w firmowym repo 🙂