Bezpieczne Gitowanie

0
220

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:

  1. git checkout -b Test
  2. git checkout Feature
  3. 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?

Jak wspomniałem, takie środowisko testowe, umożliwiające przeprowadzenie dowolnej gitowej operacji, można postawić niewielkim kosztem lokalnie u siebie. W przypadku niewielkich testów, może ono nie być tak wygodne i miłe jak poprzednie rozwiązanie, ale jeżeli chcemy przetestować coś dużo bardziej skomplikowanego, nie znam lepszego rozwiązania. W jaki sposób postawić własne repozytorium testowe? Tak naprawdę wystarczy jedno polecenie:
git init –bare
 
Ta strona bardzo fajnie wyjaśnia ewentualne wątpliwości (np. dlaczego akurat modyfikator bare). Później można już się bawić – oto moje repozytorium, którego używam do testowania różnego rodzaju pomysłów:
Tak przy okazji – narzędzie pokazane powyżej to Smart Git, być może kiedyś o nim napiszę, bo pracuje mi się na nim dużo, dużo wygodniej niż na zwykłej konsoli 🙂

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 🙂