7 rzadko używanych opcji w Git, których nie spotkasz w tutorialach i cheatsheetach
W tym poście przedstawię kilka przydatnych, ale nie tak często używanych poleceń git, które zwykle nie występują w tutorialach i w ściągawkach (cheatsheet).
3 opcje pomocne dla bałaganiarzy mających w repo dużo branchy
Sytuacja wygląda tak:
Stworzyłem nowe repozytorium, w nim stworzyłem 2 nowe branche: merged i no-merged. Branch merged po kilku commitach scaliłem z głównym, a branch no-merged zostawiłem w spokoju.
git branch -a --no-merged
Pokaże listę branchy nie scalonych z branchem na którym aktualnie się znajdujemy.
git branch -a --merged
Pokaże listę branchy już scalonych z branchem na którym aktualnie się znajdujemy.
Mi się to przydaje, bo niestety w jednym projekcie mam zaczętych kilka feature’ów i każdy na osobnym branchu. Trochę bałagan się zrobił.
git branch -a --contains $REVISION$
Pokaże listę branchy na których znajduje się dany commit. Przykład zrobiony na tym samym repozytorium – zobacz pierwszy zrzut ekranu.
$ git branch -a --contains 24368cf
* master
merged
no-merged
$ git branch -a --contains 0829c61
* master
merged
$ git branch -a --contains 4562d62
no-merged
Tworzenie brancha od razu z branchem zdalnym
Za pomocą poniższego polecenia można stworzyć jednocześnie branch lokalny i zdalny.
git checkout -b -t feature-branch-name origin/feature-branch-name
Przyda się dla osób pracujących z GitFlow lub podobnym workflow.
Pokazanie historii innego brancha
Aby zobaczyć historię innego brancha nie musimy się na niego przełączać. Nie musimy odpalać jakiegoś GUI, gdzie można na wykresie zobaczyć wszystkie branche. Można użyć polecenia log i na końcu dodać nazwę brancha:
git log no-merged
Widać, że jestem na branchu master, a commity są pokazane z brancha no-merded. Polecenie git lgg
to mój alias na git log --oneline
+ dodatkowe opcje.
Różnica w pliku z danego czasu
git diff HEAD@{"$DATE$ $TIME$"} $FILE$
Inny zapis:
git diff @{"$DATE$ $TIME$"} $FILE$
To pokaże różnicę w podanym pliku od podanej daty do ostatniej zmiany. Do pokazania jak to działa stworzyłem sobie repozytorium i zrobiłem w nim 4 commity.
W repozytorium jest dodany plik text.txt. Każdy commit dopisuje do niego linię z takim samym tekstem jaki jest wpisany w wiadomości commita. Czyli w commicie 6502475 – Bardzo stary commit został dodany tekst “Bardzo stary commit” itd. Commity są zrobione w parunastu sekundowych odstępach, więc tylko na sekundach będę pokazywał różnicę.
W pierwszym przykładzie chciałem zobaczyć jaka nastąpiła zmiana w pliku od godz. 08:13:48, czyli sekundę przed ostatnim commitem. Widać wyraźnie, że doszła jedna linia tekstu. W drugim przypadku przeglądam zmiany od godz. 08:13:38, czyli sekundę przed drugim commitem. Tutaj widzę, że od tego czasu doszły aż 3 linie tekstu.
Różnica, ale z ignorowaniem białych znaków
git diff -w $REVISION$
Mamy taką sytuację: ktoś dodał klasę User.cs i wyglądała ona tak:
Na końcu linii zostawił spację i znak tabulatora. Kolejna osoba dodała do tej klasy nową właściwość i przy okazji zrobiła porządek z białymi znakami. Teraz klasa wygląda tak:
Ale diff pokazuje coś takiego:
Doszła właściwość Login, ale poza tym nic się nie zmieniło. Przynajmniej nie widać tego na tym diffie. Wygląda na to, jakby usunięto 2 linie i dodano 3 nowe 🙂 Jeśli użyjemy polecenia diff z opcją -w zobaczymy natomiast inny wynik:
Doszła jedna nowa linia, zmiany związane z białymi znakami są w tym przypadku ignorowane.
Mam nadzieję, że te opcje kiedyś się Wam przydadzą 🙂
0 Komentarzy