Git Flashcards

(80 cards)

1
Q

Co to jest Git?

A

Git to najpopularniejszy system kontroli wersji znacznie usprawnia, a jednocześnie zabezpiecza codzienną pracę przy kodzie.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

git clean -idf

A

usuwa nieśledzone pliki z katalogu roboczego (working directory)

działania polecenia git clean nie da się odwrócić

Flaga -idf pozwala na uruchomienie polecenia git clean w trybie interaktywnym, gdzie git pyta nas, które pliki chcielibyśmy usunąć

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

git reset

A

Przenosi pliki z przechowalni (index, stage) do katalogu roboczego (working directory).

Pełni odwrotną rolę niż git add.

Zmienia status plików że ‘śledzone’ z powrotem na ‘zmodyfikowane’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

git rm

A

cofa pliki z repozytorium i dodają je z powrotem na stage (do przechowalni)

po wykonaniu git rm musimy zrobić commit opisujący tę czynność

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Stage

A

Kolejka oczekiwania (git add dodaje tam pliki)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

clear

A

Polecenia terminala, które usuwa wcześniej wpisane komendy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

git add .

A

. dodaje wszystkie pliki do przechowalni (indexu, stage)

zmienia status plików ze ‘zmodyfikowane’ na ‘śledzone’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

git status

A

Pozwala sprawdzić jaki status mają pliki w naszym projekcie
1. zmodyfikowany (modified)
2. śledzony (staged)
3. zatwierdzony (commited)

albo też mówi o tym na jakim jesteśmy branchu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

git checkout – index.html

A

Cofa wszystkie zmiany w pliku ‘index.html’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

git checkout

A

Pozwala się przełączać pomiędzy różnymi encjami:
- plikami
- commitami
- branchami

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

git log –oneline

A

Pozwala podejrzeć historię w przydatnym dla oka formacie

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Przywracanie zmian za pomocą git checkout

A

podejrzenie historii:
$ git log –oneline

kopiujemy kod (hash np. 654321e) commita, do którego chcemy wrócić

$ git checkout 654321e

w tym momencie znajdujemy się w trybie odłączonej głowy ‘detached head’ gdzie możemy dowolnie przeglądać projekt i wprowadzać eksperymentalne zmiany, które nie zostaną zapisane.
Jeśli chcemy je zachować to wpisujemy:

$ git checkout -b <new-branch-name></new-branch-name>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

tryb odłączonej głowy

A

Po wpisaniu git checkout <hash>
znajdziemy się w trybie odłączonej głowy 'detached head' gdzie możemy dowolnie przeglądać projekt i wprowadzać eksperymentalne zmiany, które nie zostaną zapisane. Jeśli chcemy je zachować to wpisujemy:
git checkout -b <new-branch-name></new-branch-name></hash>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

jak odwrócić zmiany z wybranego commitu i zapisać je jako nowy commit (bez modyfikacji historii)

A

wchodzę na git log –oneline
kopiuje hash commitu (np. 654321e) do którego chcę cofnąć, a następnie wklejam go do polecanie git revert:
$ git revert 654321e

Historia commitów w żaden sposób nie zostaje zmodyfikowana ani usunięta

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

jak przywrócić zmiany w repozytorium do wskazanego punktu z historii zmian (z modyfikacją historii)

A

możemy użyć git reset
należy jednak pamiętać, że polecenie git reset stosujemy na commitach, na których nie zrobiono jeszcze git push

wchodzę na git log –oneline
kopiuje hash commitu (np. 654321e) do którego chcę cofnąć. Teraz mamy 3 opcje do wyboru:

git reset –mixed (domyślny)

wszystkie nowsze commity będą usunięte z historii gita i znajdą się w katalogu roboczym

git reset –soft
nowsze commity trafią na stage i będziemy je mogli dodać do następnego commitu

git reset –hard
nowsze commity zostaną całkowicie utracone

Wybieram:
$ git reset –hard 654321e

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

working directory

A

katalog roboczy

lokalny folder, w którym pracujemy nad danym projektom i tworzymy swoje pliki projektu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

stage (index)

A

przechowalnia
miejsce, do którego dodajemy zmiany w plikach za pomocą polecenia
$ git add

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

history

A

historia (często repozytorium zdalne)

miejsce, do którego trafiają pliki za pomocą polecenia
$ git commit

(każdą zmianę zatwierdzamy w historii)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

git add

A

zmiany zostają wysłane z working dirtectory (katalog roboczy) do stage (index, przechowalnia)

zmiany te/pliki zmieniają wtedy status ze
zmodyfikowanego (modified) na śledzony (staged)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

git commit

A

wysyła zmiany ze stage (index, przechowalnia) do historii repozytorium zdalnego

zmiany te/pliki zmieniaja wtedy status ze staged (śledzony, w przechowywalni) na zatwierdzony (commited)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

git reset – files

A

modyfikuje historię repozytorium zdalnego

zmiany są usuwane z historii i wracajądo przechowalni (index, stage) - możemy je wysłać z następnym commitem

pliki zmieniają status z zatwierdzony na śledzony

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

git checkout –file

A

zmiany w danym pliku są cofane z przechowalni (stage, index) z powrotem do katalogu roboczego, w którym pracujemy (working directory)

pliki zmieniają status ze śledzony na zmodyfikowany

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

git init

A

inicjuje powstanie nowego repozytorium (powstaje plik .git)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

git commit

A

dodaje zmiany/pliki do repozytorium (historii)

zmieniają one wtedy status ze śledzone (w przechowalni) na zatwierdzone (commited)

git commit -m “pozwala dodać kometarz/opis wysyłanego commita”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
git log --author="Jagoda" lub git log --oneline --author="Jagoda"
wyszukuje w historii commity wysłane przez Jagodę
26
git log --grep="view"
przeszukiwanie commitów po frazie
27
git log --oneline -3
określamy ile commitów z historii chcemy zobaczyć w formie skondensowanej
28
git log --oneline -- index.html
wyszukiwanie commitów dot. konkretnych plików (ścieżek)
29
gdy znajdziemy w historii jakiś commit, który nas interesuje możemy w niego wejść wpisując
$ git checkout 654321e ale można użyć też flagi patch $ git log --oneline --patch -- index.html a jeszcze ciekawiej: $ git log --oneline --summary -- index.html gdzie wyświetlona jest skrócona informacja o tym, co zostało zrobione z danym plikiem lub $ git log --oneline --stat -- index.html która wyświetla statystyki zmian konkretnych plików
30
git log --format ="%h %an %s (%cr)"
flaga format komendy git log pozwala na użycie dostępnych opcji formatowania opisanych w dokumentacji. Np. tutaj chcemy otrzymać %h - skrócone hashe commitów %an - imię autora %s - komentarze %cr - informację o tym kiedy commit został dodany w nawiasie
31
git shortlog
pokazuje historię zmian z podziałem na użytkowników
32
Jak powinien wyglądać elegancki opis commita?
Powinien mieć tytuł z dużej litery, bez kropki, w trybie rozkazującym. Potem niezbyt długi opis (max 73 znaki, gdyż git nie łamie linii. Tytuł i opis powinny być oddzielone od siebie 1 pustym wierszem. po wpisaniu : $ git commit bez flag, powinien nam się otworzyć domyślny edytor tekstu np. vi lub sublime text
33
git stash
dodanie danych na stos W sytuacji gdy okaże się, że wprowadziliśmy zmiany nie na tym branchu co trzeba (np. w masterze) i nie możemy się zcheckoutować bez zapisania tych zmian, a nie chcemy ich tracić, możemy skorzystać z polecenia: $ git stash $ git status On the branch master nothing to commit, working tree clean Polecenie git stash umożliwia odłożenie tych zmian na stos. Dzięki niemu zmienić branch, nie tracąc całkowicie naszych zmian: $ git branch nazwa_brancha i przy pomocy polecenia $ git stash pop wgrywamy odłożone wcześniej na stos zmiany, na brancha, na którym jesteśmy.
34
1) git stash push -m "Opis zmian" 2) git stash list
1) odłożenie zmian na stos wraz z ich opisem 2) podgląd stosu
35
Jakie pliki można stashować?
Śledzone, czyli takie na których wykonano już polecenie $ git add . Możemy to też obejść wpisując $ git stash push -m "Opis zmian" -u Flaga -u
36
git stash apply stash@{1}
przywracanie zmian do katalogu roboczego bez usuwania ich ze stosu * stash@{1} nazwa zmiany skopiowana z git stash list, bez podania tego identyfikatora przywracamy wszystkie zmiany znajdujące się na stosie
37
git stash pop stash@{1}
przywracanie zmian do katalogu roboczego i usuwanie ich ze stosu * stash@{1} nazwa zmiany skopiowana z git stash list, bez podania tego identyfikatora przywracamy wszystkie zmiany znajdujące się na stosie
38
git stash drop stash@{1}
usuwanie zmian ze stosu bez przywracania go do katalogu roboczego * stash@{1} nazwa zmiany skopiowana z git stash list, bez podania tego identyfikatora przywracamy wszystkie zmiany znajdujące się na stosie
39
git stash branch
tworzy nowy branch zawierający zmiany z wybranego stosu. Chcesz zawsze pozostać na bieżąco z programowaniem?
40
Co to jest snapshot?
Git przechowuje zmiany w repozytorium w postaci tzw. snapshotów. Snapshot tworzony jest w momencie gdy dodajemy nowy commit. Każdy snapshot posiada swój numer (hash, np. 449b7bd) na podstawie którego możemy go zidentyfikować. Branch to rodzaj wskaźnika, wskazującego na konkretny snapshot Dzięki Branch'om (gałąź) w Gicie mamy możliwość rozwijania różnych wersji projektu niezależnie od siebie. Utworzenie nowego brancha to po prostu utworzenie nowego wskaźnika, nie tworzymy żadnej nowej kopii projektu i nie marnujemy dodatkowych zasobów
41
Co to jest branch?
Branch to rodzaj wskaźnika, wskazującego na konkretny snapshot Branch czyli gałąź symbolizująca rozgałęzienie wersji projektu. Dzięki Branch'om w Gicie mamy możliwość rozwijania różnych wersji projektu niezależnie od siebie. Utworzenie nowego brancha to po prostu utworzenie nowego wskaźnika, nie tworzymy żadnej nowej kopii projektu i nie marnujemy dodatkowych zasobów
42
Na czym polega przyłączenie się na inny branch?
O tym, która wersja projektu jest wczytana w katalogu roboczym decyduje dodatkowy wskaźnik tzw. HEAD. W momencie gdy przełączamy się na inny branch, wskaźnik HEAD zmienia swoją pozycję. Dodając nowe zmiany do projektu, tworzymy nowy snapshot, na który wskazuje branch develop. Na gałęzi master pow3inna znajdować się stabilna wersja projektu. Gałąź develop to gałąź, na której rozwijamy nowe funkcje. Gdy nowe funkcje zostają ukończone możemy połączyć gałąź branch z masterem i opublikować zmiany na serwerze produkcyjnym
43
git branch
pozwala podejrzeć listę istniejących branchy branch aktywny (ten który mam w katalogu roboczym) będzie na zielono
44
git checkout develop
przełączam się na branch develop
45
git log --oneline
widzę liste snapshotów (commitów) oraz mam zaznaczone gdzie jestem (wskaźnik HEAD)
46
git status git add . git commit -m "Opis commita"
Kroki, które podejmuję gdy chcę wysłać zmiany do repozytorium
47
Jak połączyć develop branch z masterem?
Aby połączyć branch develop z masterem, musze: - upewnić się, że znajduje się na branchu master (jesli nie to wpisuje git checkout master) - a następnie wpisuję nazwę brancha, który chce połączycć do polecenia git merge $ git merge develop
48
Jak usunąć niepotrzebny branch np. develop branch?
git branch -D develop
49
Co to jest master branch?
Główna gałąź projektu wykorzystywana do publikacji najnowszej wersji projektu na serwerze produkcyjnym. Master powinien zawsze zawierać stabilną wersję projektu. Możliwość wprowadzenia zmian powinna być ograniczona.
50
Dev branch
Gałąź, na której znajduje się wersja testowa projektu (alpha/beta), zwykle połączona z serwerem testowym.
51
Feature branch
Na tej gałęzi prowadzone są prace nad nowymi funkcjami. Po ukończeniu prac zmiany trafiają na branch dev. Ogólna zasada jest taka, że jednej funkcji dedykujemy jeden branch
52
User branch
Gałęzie użytkowników służą do indywidualnej pracy członków zespołu nad zmianami. Ukończone zmiany trafiają na branch feature.
53
Test/Bugfix branch
W szczególnych przypadkach konieczne jest szybkie wprowadzenie zmian. W tej sytuacji wykorzystywane są branche typu bugfix. Przygotowane tutaj zmiany najczęściej trafiają bezpośrednio na branch dev.
54
Jak wygląda workflow, jeśli chodzi o branche?
1) User branch - użytkownik 1 pracuje nad nową funkcją. Gdy kończy swoją pracę, wysyła te zmiany na branch feature. 2) Feature branch - tutaj mamy wersję naszej aplikacji w typowej wersji Alpha. Następnie gdy prace nad nową funkcją zostają ukończone, zmiany przenoszone są na branch developerski 3) Dev branch - tutaj nowe funkcjonalności zostają poddane ostatecznym testom (wersja Beta). Gdy wszystko jest OK (a rzadko tak jest) zmiany przenoszone są na mastera. 4) Master branch - zmiany z mastera są bezpośrednio produkowane na serwerze produkcyjnym
55
Jak wygląda workflow w przypadku bugfixów?
1) Znajdujemy jakiś krytyczny błąd na serwerze produkcyjnym 2) Błąd jest naprawiany na develop branch (wersje Alpha/Beta) 3) Potem poprawki są wysyłane na master i stamtąd lecą na serwer produkcyjny
56
Repozytorium lokalne
Repozytorium projektu, które aktualnie znajduje się na naszym komputerze
57
Repozytorium zdalne
Repozytorium zdalne - to każde inne repozytorium, które jest połączone z repozytorium lokalnym, lecz znajduje się w innej lokalizacji
58
Gdzie możemy umieścić swoje repozytorium zdalne?
Github, Gitlabm, Bitbucket
59
Zmiany z lokalnego repozytorium na zdalne wysyłamy poleceniem ........
git push
60
Zmiany ze zdalnego repozytorium na lokalne repozytorium pobieramy poleceniem ......
$ git fetch widzimy informacje o zmianach $ git merge origin/master scalamy te zmiany z lokalnym repozytorium
61
git push
wysłanie zmian z lokalnego repozytorium na zdalne
62
Za każdym razem gdy zaczynamy pracę w lokalnym repozytorium powinniśmy upewnić się , że ..............
w zdalnym repozytorium nie pojawiły się nowe zmiany
63
Fork
utworzenie kopii repozytorium - forkuje/kopiuje zdalnie repozytorium które mnie interesuje na swoje konto na githubie - następnie aby pobrać to repozytorium na swój komputer mogę skorzystać z polecenia $ git clone - tworzę sobie nowy branch $ git checkout feature i pracuje sobie nad nową funkcjonalnością - teraz jeśli chcę wprowadzić zmiany do mastera to najpierw muszę zacommitować te zmiany u siebie w swoim forku: git add . git commit -m "Add new cool feature" git push - aby dodać swój feature do głownego (orginalnego) repozytorium muszę zrobić pull request
64
Jak zrobić Pull request?
Na githubie w zakładce "<>Code" danego repozytorium widzimy "Your recently pushed branches:" tam dostępny jest przycisk: "Compare & pull reques" Po wejściu w tę opcję możemy skierować/zaadresować pull requesta to głownego repozytorium (base: to ten z którego forkowaliśmy nasz projekt) Pull request musi być teraz zaakceptowany przez właściciela głównego repozytorium (musi kliknąć merge pull request) Gdy to zaakceptuje musimy posprzątać u siebie (usunąć nowy branch) i poleceniem git fetch znowu zsynchronizować naszą lokalną wersję repo z głównym (będzie tam nasz branch)
65
Dlaczego warto użyć git rebase?
Za pomocą git rebase możemy w sposób kontrolowany nadpisać (zmodyfikować historię) tak, aby była ona czytelniejsza, mniej skomplikowana. Fajną opcją jest utuchomienie rebase w trybie interaktywnym. Można to zrobić zarówno w Pycharmie jak i z poziomu terminala: $ cd ../rebase-interactive $ git log -oneline
65
Dlaczego warto użyć git rebase?
Za pomocą git rebase możemy w sposób kontrolowany nadpisać (zmodyfikować historię) tak, aby była ona czytelniejsza, mniej skomplikowana. Fajną opcją jest utuchomienie rebase w trybie interaktywnym. Można to zrobić zarówno w Pycharmie jak i z poziomu terminala: $ cd ../rebase-interactive $ git log -oneline
66
Dlaczego warto użyć git rebase?
Za pomocą git rebase możemy w sposób kontrolowany nadpisać (zmodyfikować historię) tak, aby była ona czytelniejsza, mniej skomplikowana. Fajną opcją jest utuchomienie rebase w trybie interaktywnym. Można to zrobić zarówno w Pycharmie jak i z poziomu terminala: $ cd ../rebase-interactive $ git log --oneline $ git checkout feature Switched to branch 'feature' $ git rebase master -i Gdzie mamy różne opcje do wyboru p, pick = use commit dzieki 'p' wybieramy numer commita który nas interesuje r, reword = use commit, but edit the commit message e, edit = use commit, but stop amending s, squash = use commit, but meld into previous commit f, fixup = like 'squash', but discard this commit's log message x, exec = run command (thge rest of the line) using shell d, drop = remove commit
67
git rebase master -i reword
r, reword = use commit, but edit the commit message
68
git rebase master -i edit
e, edit = use commit, but stop amending
69
git rebase master -i squash
s, squash = use commit, but meld into previous commit
70
git rebase master -i fixup
f, fixup = like 'squash', but discard this commit's log message
71
git rebase master -i exec
x, exec = run command (thge rest of the line) using shell
72
git rebase master -i drop
d, drop = remove commit
73
Na czym dokładnie polega rebase?
Proces rebase polega na zmianie commitu na podstawie, którego został utworzony branch.
74
Tagi
To rodzaj zakładek, który pozwala nam odnaleźć ważny commit. Najczęściej tagi używamy do oznaczenia commitów, na których zakończone zostały prace nad kolejną wersją aplikacji
75
Co to są Releases, które tworzymy w git?
Nowe wydania aplikacji (releases) tworzymy na podstawie tagów
76
Jak usunąć tag ze zdlanego repozytorium?
git push nazwa_zdalnego_repo -d v1.0 v1.0 to nazwa tagu
77
Jak utworzyć tag?
Aby utworzyć tag wpisuę $ git tag v1.0 -a -m "Komentarz v1.0 to nazwa tagu (wersja projektu) -a autor -m komentatz Aby wyświetlić tagi używamy polecenia git tag lub alternatywnie git show v1.0
78
Jak usunąć tag?
Usuwanie tagu $ git tagh -d
79
Co zrobić żeby tag znalazł się w zdalnym repozytorium?
Tagi podobnie jak commity musimy wysłać do zdalnego repozytorium: $ git push --tags