CheatSheat for GIT

Config - setup git

git config --global user.name "Username"
git config --global user.email "some@email.com"

Create - from existing data

cd ~/my_project_directory
git init
git add . 

Clone

git clone ~/existing_repo ~/new/repo
git clone git://host.org/project.git
git clone ssh://user@host.org/project.git

git clone [url]                                      #klonira ceo projekat, pulluje najnoviju verziju u folder tog projekta (stoji na kraju url-a)
git clone [url] myFolder                             #klonira ceo projekat u myFolder

Add

git add .                                            #dodaje sve fajlove
git add -v 					     #dodaje sve fajlove verbose
git add . -u 					     #dodaj sve izmenjene fajlove sem untrekovanih

Fetch && Pull

git fetch                                          #povlaci sve brencheve i/ili tagove (zajedno cine "refs"), apdejtuje sve trekovane brencheve
git pull                                           #povlaci sve izmene sa remote repozitorijuma u moj trenutni brench
git pull origin/[brench_name]                      #povlaci sve izmene sa remote brencha u odredjeni lokalni brench

brenching

git remote show origin                             #lista sve remote brencheve
git checkout -b [brench_name]			   #pravi novi brench i prelazi u taj brench
git brench                                         #pokazuje trenutni brench
git brench -v                                      #pokazuje zadnji komit na trenutnom brenchu     
git brench --all                                   #lista sve brench-ove (lokalno i remote)
git push origin [brench_name]                  	   #pushuje lokalni brench na origin remote server
git push origin --delete [brench_name]    	   #brise brench sa remote servera
git brench -d [brench_name]                        #brise brench lokalno
git brench --merged                                #pokazuje brench-ove koji su merged
git brench --no-merged                             #pokazuje brench-ove koji jos nisu merged
git remote update origin --prune                   #update-uje branch listu i remote i lokalno

Merging

git checkout master 				   #prelazim u master brench
git merge [brench_name]                            #merge-ujem [brench_name] sa masterom
git merge origin/development			   #merge-uje devel sa masterom

Status

git status                                              #lista fajlove koji nisu merged
git status -uno                                         #ne prikazuje untracked fajlove (git status --untracked-files=no)
git log                                                 #lista komitova
git ls-files . 					        #lista sve fajlove u repou
git ls-files . --ignored --exclude-standard --others	#lista git-ignored fajlove
git ls-files . --exclude-standard --others		#lista untrekovane fajlove
git clean -fd                                           #brise untracked fajlove

Undo

git reset					   #undo posle git add .
git reset --soft HEAD^				   #undo posle git commit -m 'update'
git reset HEAD [file_name]                         #undo posle git add [file_name] - undo posle dodavanja jednog fajla
git checkout -- [file_name]                        #diskarduje izmene u jednom fajlu 
git checkout -- . 				   #diskarduje izmene u svim fajlovima
git revert b53b3c796b6fdd3e7a02e		   #revert komit - vraca komit koji je greskom otisao (list svih komitova git log)

Reset current branch to be as remote master

git fetch origin
git reset --hard origin/master

Diff

git diff --name-only --diff-filter=U 		   #lista sve fajlove koji imaju konflikte posle stash-a
git diff master master/origin                      #razlike izmedju lokalnog mastera i origin mastera
git log --graph  --decorate                        #graph brenchova i komitova
git diff [brench_name] [brench_name]               #razlike izmedju dva brencha
git diff --name-only  [brench_name] [brench_name]  #razlike izmedju dva brencha samo fajlovi
git diff [local_brench] [origin/remote_brench]     #razlika izmedju lokalnog i remote brench-a
git log --oneline [brench_name] ^master   	   #razlika komitova izmedju dva brench-a
git log --oneline [brench_name]..master            #isto sto i iznad
git diff -R                                        #diff reverzno

Stash

git stash                                          #sacuva sve izmene i vraca u najnoviju komitovanu verziju
git stash save "Poruka"                            #isto sto i ovo gore samo sa deskriptivnom porukom
git stash list                                     #lista sve stash 
git stash apply stash@{0}                          #vraca stash@{0}
git stash drop stash@{0}                           #brise odredjeni stash, (kad ni jedan nije zadat brise zadnji)
git stash show -p stash@{0}			   #prikazuje sta je u stash-u
git diff stash@{0}  				   #razlike u stashu

gitignore #dodavanje gitignore fajla posle komita

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

Remove files from repo

git rm --cached [file_name]					   #brise fajl iz repozitorijuma, ne i fizicki
git rm --cached -r [dir_name]					   #brise direktorijum iz repozitorijuma, ne i fizicki

Tags

git tag Release-0.0.1 -m "Release of Software on May 22"                #dodaje odredjeni tag 
git push origin Release-0.0.1                                           #pushuje odredjeni tag na origin remote