Git Cheat Sheet


Introduction

$ git help COMMAND_NAME – wyświetla pomoc odnoście komendy
$ git status – pokazuje aktualny status (dodane, pliki, dokonane zmiany, itp.)
$ git log – pokazuje historię

Config

Atrybuty zapisywane są w pliku ~/.gitconfig

Wymagane

$ git config --global user.name "Imie Nazwisko"
$ git config --global user.email "user@email.com"

Dodatkowe

$ git config --global credential.helper "store"

$ git config --global core.editor "kate --startanon"

$ git config --global diff.tool kdiff3
$ git config --global difftool.prompt false
$ git config --global difftool.kdiff3.path "/usr/bin/kdiff3"
$ git config --global difftool.kdiff3.trustExitCode false

$ git config --global merge.tool kdiff3
$ git config --global mergetool.prompt false
$ git config --global mergetool.kdiff3.path "/usr/bin/kdiff3"
$ git config --global mergetool.kdiff3.trustExitCode false

$ git config --global alias.log20 "log --oneline --decorate --graph HEAD~20..HEAD"
$ git config --global alias.log40 "log --oneline --decorate --graph HEAD~40..HEAD"
$ git config --global alias.logall "log --oneline --decorate --graph --all"

$ git config --global --list

Add

$ git add FILE_NAME – dodaje plik do Staging Area/Git Index
$ git add . – dodaje wszystkie nowe i zmodyfikowane pliki do Staging Area
$ git add -u – usuwa pliki usunięte lokalnie (wymaga zrobienia commita)

Commit

$ git commit [-m "Message"] – commituje zmiany do repozytorium
$ git commit -a – dodaje wszystkie zmodyfikowane pliki i commituje zmiany
$ git commit -am "Message" – patrz wyżej

Push

$ git push origin master – pushuje zmiany do zdalnego repozytorium (do gałęzi master)
$ git push origin BRANCH_NAME – pushuje zmiany do zdalnego repozytorium (do gałęzi BRANCH_NAME)
$ git push -u origin master – pierwszy push po podpięciu zdalnego repozytorium
$ git push origin master --tags – pushuje tagi do zdalnego repozytorium
$ git push origin :TAG_NAME – usuwa taga ze zdalnego repozytorium

$ git push -u origin master – pierwszy push do nowo podpiętego zdalnego repozytorium
See remote

Pull

$ git pull – pull ze zdalnego repozytorium

Fetch

$ git fetch – podobne do pull ale nie wpływa na Working Directory

Ignore

Ignorowanie plików odbywa się za pomocą plików .gitignore, w których zapisuje się reguły ignorowania po jednej na linię, np.:
*.log
Plik .gitignore powienien być dodany do repozytorium.

Reset (unstaging)

$ git reset HEAD FILE_NAME – wycofuje plik ze Staging Area

Checkout (reverting)

$ git checkout FILE_NAME – przywraca plik do ostatnio wycommitowanej wersji
$ git checkout -- FILE_NAME – wycofuje zmiany w pliku
$ git checkout -- . – jeżeli wywołane w root-cie wycofuje wszystkie zmiany

Clean

$ git clean -n – listuje lokalne nieśledzone pliki
$ git clean -f – usuwa lokalne nieśledzone pliki
$ git clean -fd – usuwa lokalne nieśledzone pliki i katalogi
$ git clean -fdx – usuwa lokalne nieśledzone pliki i katalogi bez względu na to czy są w pliku .gitignore

Branch

$ git branch – listuje lokalne branche
$ git branch -r – listuje zdalne branche
$ git branch -a – istuje wszystkie branche (lokalne i zdalne)
$ git branch BRANCH_NAME – tworzy nowy branch
$ git branch -m OLD_NAME NEW_NAME – zmienia nazwę brancha
$ git branch -d BRANCH_NAME – usuwa lokalny branch
$ git branch -rd origin/BRANCH_NAME – usuwa zdalny branch

Branch push
Branch diff

Checkout (branches)

$ git checkout BRANCH_NAME – przełącza aktywny branch
$ git checkout -b BRANCH_NAME – tworzy nowy branch i przełącza aktywny branch w jednym kroku

Diff

$ git diff – porównuje Working Directory ze Staging Area w trybie tekstowym
$ git difftool – robi to samo używając skonfigurowanego narzędzia difftool
$ git diff HEAD – porównuje Working Directory z Local Repository
$ git diff --staged HEAD – porównuje Staging Area z Local Repository
$ git diff -- FILENAME – porównuje pojedynczy plik
$ git diff HASH1 HEAD – porównuje commit HASH1 z ostatnim commitem (HEAD)
$ git diff HASH1 HASH2 – porównuje dwa commity
$ git diff HEAD HEAD^1 – porównuje HEAD i HEAD-1
$ git diff master origin/master – porównuje repozytorium lokalne i zdalne
$ git diff BRANCH_NAME_1 BRANCH_NAME_2 – porównuje branche
$ git diff TAG_NAME_1 TAG_NAME_2 – porównuje tagi

Merge

Polecenia mergowania należy wywołać mając aktywny branch, do którego chcemy wmergować zmiany z innego brancha.

$ git merge BRANCH_NAME – fast forward/automatic merge (usuwa informacje o branchu)
$ git merge BRANCH_NAME --no-ff – no fast forward merge (zachowuje informacje o branchu)

Rebase

Polecenia rebasowania należy wywołać mając aktywny branch, którego bazę chcemy zmienić.

$ git rebase master – zmienia bazę brancha na aktualny branch master
$ git rebase --abort – przerywa rebazowanie
$ git rebase --continue – ontynuowanie rebazowania po rozwiązaniu konfliktów

Stash

Stashing zachowuje zmiany wykonane w Working Directory i Staging Area "na później" i przywraca Working Directory i Staging Area do stanu sprzed wprowadzenia zmian.

$ git stash – zapisuje zmiany i przywraca poprzedni stan
$ git stash apply – wczytuje zmiany przechowywane w stashu do Working Directory i Staging Area
$ git stash list – listuje zapisane stashe
$ git stash drop – usuwa ostatni stash

Stashing zachowuje zmiany wykonane w Working Directory i Staging Area "na później" i przywraca Working Directory i Staging Area do stanu sprzed wprowadzenia zmian.

Tag

Tagi to etykiety commit-ów.

$ git tag TAG_NAME [-m "Message"] – tworzy taga [z komentarzem]
$ git tag -a TAG_NAME – tworzy taga z komentarzem
$ git tag --list – listuje tagi
$ git tag --delete TAG_NAME – usuwa taga
$ git stash drop – usuwa ostatni stash

Tag push
Tag diff

Reset

$ git reset HEAD – przywraca wershę HEAD
$ git reset HEAD^ – przywraca wershę HEAD-1
$ git reset HASH – przywraca wershę oznaczoną hashem

Init

$ git init – tworzy repozytorium (lokalne) w bierzącym katalogu
$ git init DIR_NAME – tworzy katalog i tworzy w nim repozytorium (lokalne)

Remote

$ git remote add origin git@github.com:user/project.git – podpina lokalny projekt do zdalnego repozytorium

Remote push

Git Flow

A successful Git branching model
git-flow cheatsheet
ściągawka do git-flow
Professional Guides: Workflow Strategies on YouTube

GitHub

Configuring a remote for a fork

Configuring a remote for a fork instruction on GitHub

Execute following commands in the local repository dir:
$ git remote add upstream https://github.com/user-name/repo-name.git
$ git remote -v

SSH Authentication

On Windows open Git-Bash, on Linux open terminal, go to the ~/.ssh directory and execute following commands:
$ ssh-keygen -t ed25519 -C "your_email@example.com"
On systems that don't support the Ed25519 algorithm, use:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Above commmand creates 2 files: id_ed25519 and id_ed25519.pub or id_rsa and id_rsa.pub Copy all content of the id_ed25519.pub or id_rsa.pub file into GitHub > Account Settings > SSH Keys and name the key. Key is assigned to the specific computer.
After this you should connect with GitHub via SSH:
$ ssh -T git@github.com
Following communicate will appear if connection is established:
Hi USER-NAME! You've successfully authenticated, but GitHub does not provide shell access.

GitHub Flow

GitHub flow on GitHub
Professional Guides: Workflow Strategies on YouTube