Git Flashcards

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
Q

git log –author=”Jagoda”

lub

git log –oneline –author=”Jagoda”

A

wyszukuje w historii commity wysłane przez Jagodę

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

git log –grep=”view”

A

przeszukiwanie commitów po frazie

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

git log –oneline -3

A

określamy ile commitów z historii chcemy zobaczyć w formie skondensowanej

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

git log –oneline – index.html

A

wyszukiwanie commitów dot. konkretnych plików (ścieżek)

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

gdy znajdziemy w historii jakiś commit, który nas interesuje możemy w niego wejść wpisując

A

$ 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

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

git log –format =”%h %an %s (%cr)”

A

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

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

git shortlog

A

pokazuje historię zmian z podziałem na użytkowników

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

Jak powinien wyglądać elegancki opis commita?

A

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

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

git stash

A

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
Q

1) git stash push -m “Opis zmian”
2) git stash list

A

1) odłożenie zmian na stos wraz z ich opisem
2) podgląd stosu

35
Q

Jakie pliki można stashować?

A

Ś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
Q

git stash apply stash@{1}

A

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
Q

git stash pop stash@{1}

A

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
Q

git stash drop stash@{1}

A

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
Q

git stash branch

A

tworzy nowy branch zawierający zmiany z wybranego stosu. Chcesz zawsze pozostać na bieżąco z programowaniem?

40
Q

Co to jest snapshot?

A

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
Q

Co to jest branch?

A

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
Q

Na czym polega
przyłączenie się na inny branch?

A

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
Q

git branch

A

pozwala podejrzeć listę istniejących branchy

branch aktywny (ten który mam w katalogu roboczym) będzie na zielono

44
Q

git checkout develop

A

przełączam się na branch develop

45
Q

git log –oneline

A

widzę liste snapshotów (commitów) oraz mam zaznaczone gdzie jestem (wskaźnik HEAD)

46
Q

git status
git add .
git commit -m “Opis commita”

A

Kroki, które podejmuję gdy chcę wysłać zmiany do repozytorium

47
Q

Jak połączyć develop branch z masterem?

A

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
Q

Jak usunąć niepotrzebny branch np. develop branch?

A

git branch -D develop

49
Q

Co to jest master branch?

A

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
Q

Dev branch

A

Gałąź, na której znajduje się wersja testowa projektu (alpha/beta), zwykle połączona z serwerem testowym.

51
Q

Feature branch

A

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
Q

User branch

A

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
Q

Test/Bugfix branch

A

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
Q

Jak wygląda workflow, jeśli chodzi o branche?

A

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
Q

Jak wygląda workflow w przypadku bugfixów?

A

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
Q

Repozytorium lokalne

A

Repozytorium projektu, które aktualnie znajduje się na naszym komputerze

57
Q

Repozytorium zdalne

A

Repozytorium zdalne - to każde inne repozytorium, które jest połączone z repozytorium lokalnym, lecz znajduje się w innej lokalizacji

58
Q

Gdzie możemy umieścić swoje repozytorium zdalne?

A

Github, Gitlabm, Bitbucket

59
Q

Zmiany z lokalnego repozytorium na zdalne wysyłamy poleceniem ……..

A

git push

60
Q

Zmiany ze zdalnego repozytorium na lokalne repozytorium pobieramy poleceniem ……

A

$ git fetch
widzimy informacje o zmianach

$ git merge origin/master
scalamy te zmiany z lokalnym repozytorium

61
Q

git push

A

wysłanie zmian z lokalnego repozytorium na zdalne

62
Q

Za każdym razem gdy zaczynamy pracę w lokalnym repozytorium powinniśmy upewnić się , że …………..

A

w zdalnym repozytorium nie pojawiły się nowe zmiany

63
Q

Fork

A

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
Q

Jak zrobić Pull request?

A

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
Q

Dlaczego warto użyć git rebase?

A

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
Q

Dlaczego warto użyć git rebase?

A

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
Q

Dlaczego warto użyć git rebase?

A

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
Q

git rebase master -i
reword

A

r, reword = use commit, but edit the commit message

68
Q

git rebase master -i
edit

A

e, edit = use commit, but stop amending

69
Q

git rebase master -i
squash

A

s, squash = use commit, but meld into previous commit

70
Q

git rebase master -i
fixup

A

f, fixup = like ‘squash’, but discard this commit’s log message

71
Q

git rebase master -i
exec

A

x, exec = run command (thge rest of the line) using shell

72
Q

git rebase master -i
drop

A

d, drop = remove commit

73
Q

Na czym dokładnie polega rebase?

A

Proces rebase polega na zmianie commitu na podstawie, którego został utworzony branch.

74
Q

Tagi

A

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
Q

Co to są Releases, które tworzymy w git?

A

Nowe wydania aplikacji (releases) tworzymy na podstawie tagów

76
Q

Jak usunąć tag ze zdlanego repozytorium?

A

git push nazwa_zdalnego_repo -d v1.0

v1.0 to nazwa tagu

77
Q

Jak utworzyć tag?

A

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
Q

Jak usunąć tag?

A

Usuwanie tagu
$ git tagh -d

79
Q

Co zrobić żeby tag znalazł się w zdalnym repozytorium?

A

Tagi podobnie jak commity musimy wysłać do zdalnego repozytorium:
$ git push –tags