Jak git zaoszczędził mi kłopotu – cz. 1

Postanowiłem napisać ten post, ponieważ od kilku dni sumiennie używam tego programu do kreowania dobrej historii edycji plików w projektach templatek wordpressa.

Właśnie, używam go od kilku dni, a już zdążył uratować mi skórę, niby w sposób niewinny, aczkolwiek było to bardzo przyjemne.

Mówiąc prosto – zauważyłem że po kilku dniach przebudowy stylu na blogu obrazki wylatują za ekran, lub nachodzą na siebie. Po prostu musiałem gdzieś wyciąć element kodu odpowiedzialny za ich wyświetlanie i zapomnieć go wkleić tam, gdzie chciałem go przenieść. Zdarza się każdemu, zwłaszcza jak programuje się wiele rzeczy pod rząd.

Ten kawałek kodu był dla mnie tyle ważny, że spędziłem nad nim wiele czasu, przeprowadziłem wiele testów i w końcu miałem zoptymalizowane remedium na dziwne zachowania <img>.  I choć ten kod był krótki, nie znaczy to że nie włożyłem w niego kupy pracy.

I tutaj vim i git przychodzą mi na ratunek.

Do całości odzysku użyłem vimowego pluginu fugitive, który pozwala zarządzać gitem.

Ogólne wprowadzenie do tego pluginu znajdziecie w tutorialu na jego temat:

LINK DO POSTA O FUGITIVE, post jeszcze nie gotowy. 🙂

Jak poradziłem sobie z problemem

z vima wywołałem

:!git lol

output:
--> git lol 
* 3b02b88 (HEAD, master) Poprawiony sidebar, pre zwalone na plugin
* 9736c0b Porządki w layoucie, ciemniejsze tło i jasne tile, drobne fixy do górnego paska.
* 749738c Tło do cssa
* ef7b11b Rozwinięty system komentarzy, stylowanie komentarzy. Większe awatary. Poprawki contentu.
* 5bb201f Odświeżone drobnostki, patch na #content i modyfikacja patcha
* d64fff4 Finalny fix headerImage
* 5c7f6c2 Mobilizacja ;)
* d0672e0 Poprawiony obrazek nagłówkowy, fixy dla obrazków, uppercase menu
* 609b8f9 Init, wymagane poprawki
^   ^^^         ^^^^^
|    |            `----- Wiadomości powiązane z commitami
|    `--------- numery SHA commitów
`------- liniowy timeline, każda * to jeden commit

Co dało mi taki ładnie sformatowany log, dzięki aliasowi gita:

git config --global alias.lol "log --graph --decorate --pretty=oneline --abbrev-commit --all"

natan@mint: tmux_002Kopiowanie outputu tmuxem

Ponieważ wszystko było w sesji tmuxa, mogłem wygodnie skopiować (tutaj wszystko zależy od configów, nie będę opisywał) numer SHA i wkleić do kolejnej komendy vima (zawartej w pluginie fugitive):

:Gedit <wklejony numer SHA>

natan@mint: tmux_004Spis edytowanych plików w tym commicie (7 zmian w style.css)

Otwiera to listę plików danego commitu i pozwala mi przeglądać ich zawartość w ładnym dzielonym ekranie vimdiffa. Oznacza to że nie tylko widzę jak wyglądał kod w tamtym momencie, ale także czym się on różni do następnego commita. (albo od jakiejś innej wejsji pliku, nawet obecnej, jeśli tak sobie życzymy)

natan@mint: tmux_005vimdiff pokazuje zmiany w pliku

I w ten sposób nie ruszając się z edytora, kilkoma prostymi poleceniami mogłem skopiować upragniony fragment kodu “z przeszłości” i wkleić do obecnie edytowanego pliku w osobnej karcie.

I tak oto kolejny mały kryzys został rozwiązany.