git config –global user.name “Joe Smith”
git config –global user.email “jSmith@mail.com”
git config –global credential.helper osxkeychain
(MAC Only or use SSH Key)
git config –list
git config –global core.editor “nameOfTextEditor -wl1”
(‘-w’ wait, ‘l1’ cursor at line 1)
git config –global color.ui true
Set color in command line
cat .gitconfig
Shows all the settings in the config file that just have been set
Create folder in desired location and in that folder:
git init
ls -a (list all)
git status
git add ‘filename’
git commit -m “ commit message here”
No more then 50 characters, MUST be specific of what has been change!
git log
Show a log of all commits.
Remote repositories works exactly like a branch, it just stores them in a on a remote server.
Create repository on git hub and copy the link.
git remote add origin http://github… (links to the remote repro.)
git push -u origin master (pushing master to origin -u upstream )
git pull
(+ git fetch)
(+ git merge)
git status
git add .
git commit -m ” descriptive commit message here”
git push
Think of it as origin/master is a separate branch form you master branch. When we do a git fetch all the changes get copied in the origin/master branch but not merger in to our master branch
We have to do a git merge for these changes get stored in out master branch.
git pull include both git fetch and git merge in one handy short cut. Sometimes however, you might want to wait with the merge but keep your origin master in sync with the remote repository.
But in reality the origin/master and master are not duplicates they are actually the same but with different head pointers. It would look something like this:
And when we merge git will move the head pointer of the master to the head pointer for the origin/master.
git status
Gives a status of project, changes, and untracked files.
git add .
Add all changed files to the stage.
git add ‘filename’
git add ‘filename’ ‘filename’ ‘filename’
For selecting files, remove ”
git *.html
Add all html files
git add ‘folderName/*’
Add folder and everything inside of it.
git commit -m “commit message here”
or short version:
git commit -am “commit message”
Stage and commits files in one go. Does not include rename and deleted files.
Make commits that are related otherwise split them up in separate commits!
git rm ‘filename’
Move removed file to the stage. HAVE TO COMMIT to actually delete it.
git rm –cashed filename
To un-stage a file.
If file name changed in browser, it shows up as 2 files (delete and untracked) do an add and in stages it knows it is a rename (data 50% the same)
Rename and move is the same in git.
git mv ‘filename’ ‘filename’
Rename and moves it to the stage area.
git mv ‘filename’ ‘folderName/filename’
Can be re-named at the same time if name is changed. Shows up as renamed in stage area.
git diff
Show changes between repository version and local version. Only before files are un-stage.
git diff ‘filename’
Shows only changes in that file.
git diff –staged
Show changes between repository version and files that are staged.
git diff –color-words ‘filename’
Show changes side by side.
git log -n 5
Shows the last five commits.
git log –since=2016-01-15
Log from a specific date.
git log –until=2016-01-15
Log from a specific date.
git log –autor=”NAME”
Only shows commits form specific person.
git log –grep=”Inint”
Search for any commits that contains Inint in the commit message.
git log –oneline
Display short version of S-H-A and commit message in one line.
git log “SHA-1 of commit”.. “fileName”
Shows what has happened to that file since the commit. remove the “”
git log -p “SHA-1 of commit”.. “fileName”
Shows what has happened to that file since the commit and what changes. remove the “”
git log –graph
Shows graph of commit tree
git log –oneline –graph –decorate
git checkout – ‘filename or directory’
Will blow away the local version and restore what is in the repository – tells that we are not checking out an new branch just a file just in case we have a branch with same name.
git reset HEAD ‘filename’
Good when assembling files for a commit and need to remove one file that don't belongs to current commit.
git commit –amend -m “message”
Reverts back to edit last commit, add changes or edit commit message. This will amend to last commit, and not create a new log entry.)
git checkout ‘S-H-A number of the commit you want to take it from’ – ‘filename’
(S-H-A number is the unique ‘commit nr’ for each commit found in the git log. This puts it in the stage area, do a commit to keep changes)
git revert ‘S-H-A number of the commit you want to take it from’
(Edit commit message and save. This will commit the reverted changes straight away. You can pass in the ‘-in’ option with revert, and then it won't actually do the commit, it will just stage it and then wait for you to actually do the commit yourself. )
The soft reset moves the HEAD pointer but don't do anything else. It left our staging index and our working directory alone.)
It is good idea to copy paste the last couple of commits from log in to a text file to refer back to when doing resets.
git reset –soft ‘SHA nr. of the commit you want to go back to’
Basically take the HEAD pointer from one commit to an other commit but not committing the change.
cat .git/refs/heads/master (to see what SHA nr. head is currently pointing at)
Mixed reset works exactly the same as the soft reset with one additional thing, which is that it makes the staging index look the same as what's in the repository)
git reset –mixed ‘SHA nr. of the commit you want to go back to’
have to re-staged and re-commit the changes.
Makes our staging index and our working directory exactly match the repo. It throws out everything that happened after that.
git reset –hard ‘SHA nr. of the commit you want to go back to’
git clean -n
Preview the files that are going to be deleted.
git clean -f
Force remove but not files that are on the stage.
git branch
Shows current branch.
git branch ‘name’
Creates new branch, no spaces or . in branch name)
git checkout ‘name’
Switch to branch.
git checkout -b ‘name’
Switch automatic to the new branch.
git checkout master
Goes back to master branch
git diff ‘branchName’..’branchName’
Shows difference between branches, 2 lines.
git diff –color-words ‘branchName’..’branchName’
Shows difference between branches color coded and on the same line.
git branch –merged
Shows all branches that completely contains another branch or not. That is whether or not everything in it has been merged into the current branch.
git branch -m ‘oldBranchName’ ‘newBranchName’
-m for move or full version –move. Move and rename is the same in git
git branch -d ‘branchName’
-d for delete or full version –delete, can't be on the branch you are deleting.
git branch -D ‘branch name’
force delete branch.
Work-flow
Be on the branch you want to merge in to.
Both branches can not have any depending ot untracked files
git merge ‘branch name to be merge’
git commit -a -m “message here”
Add all and commit with message.
Fast Forward:
If branch is ahead of master and no changes have been made to master the brand is just moved in the master time line and and move the head along to it. There will be no commit message/log written)
git merge –no-ff ‘branchName’
Forces git to make a new commit with commit message. If want to document that you did a merge.
git merge –ff-only ‘branchName’
Do a merge ONLY if you can do a fast forward, if not abort merge.
True Merge:
This opens up a text editor for you to write the commit message. After save log should say: Merge made by ‘recursive’ strategy …and list of files being merged)
3 options: abort - manually merge - merge tool
git merge –abort
Abort a merge
git show ‘6 first numbers in S-H-A ID’ (to see changes)
In text file git puts in to indicate conflicts with:<<<<<<< HEAD
==========
>>>>>> text edits
git branch –merged
Shows all the branches that have been merged at some point.
git branch –no –merge
git log –graph –oneline –all –decorate
Graphical representation of merges)
TOP TIP FOR EASY MERGE
keeps commits small
merge often
track changers to master (so your branch keeps in sync with master
The stash is a place where we can store changes temporarily without having to commit them to the repository. It's a lot like putting something into a drawer to save it for later. The stash is not part of the repository, the staging index or the working directory, it's a special fourth area in Git, separate from the others. And the things that we put into it aren't commits, but they're a lot like commits, they work in a very similar way. They're still a snapshot of the changes that we were in the process of making, just like a commit is
git stash save “message”
git stash list
Referrers to it by its ID ‘stash@{0}’ Stash is always available on all branches.
git stash show ‘stash@{0}’
Remove single quotes.
git stash show -p ‘stash@{0}’
Shows more information.
git stash pop ‘stash@{0}’
Removes it from stash. Numbering start at 0 so the third stash is number {2})
git stash apply ‘stash@{0}’
Leaves a copy in the stash.
git stash drop ‘stash@{0}’
git stash clear
Delete everything in the stash.
git remote
Gives a list of remote repositories git knows about.
git remote -v For more information. cat .git/config to see file where info is stored.
git remote rm origin
Remove the origin remote.
git push -u origin master
aliasName, branchName.
git branch -r
Shows remote branches.
git branch -a
Shows both local and remote.
If we don’t have a local copy but want made on on git hub or want to collaborate on other git hub projects.
In a plain folder no git installed:
git clone “https://github.com/…”
git diff origin/maste..”localBranchName”
To se the difference between the local repository and origin master before a push.
git fetch
When we synchronize with remote repository using fetch, we just update origin/master. Master doesn’t change at all.
git merge origin/master
git pull = git fetch + git merge
git checkout -b “newBranchName” “branchNameOnRemote”
chekout a branch from remote repository.
git push origin –delete “brancName”
Delete a remote branch from github
git config –global alias.st “status”
Creates a shortcut for status comand by typing st. It is stored in the .gitconfig file
git config –global alias.co “checkout”
git config –global alias.ci “commit”
git config –global alias.br “branch”
git config –global alias.df “diff”
git config –global alias.dfs “diff –staged”
git config –global alias.logg “log –graph –decorate –oneline –abbrev-commit –all”
.gitignore File syntax
- # is a comment
- *.psd (ignore all psd files)
- *.txt (ignore all txt files)
- !README.txt (but not this file)
- _fonts/ (ignores a whole font folder)
git rm –cached “fileName”
To stop tracking file, shows up as deleted on stage + add to the .gitignore file.
Git ignores directories that are empty!
Solution is to add an empty file inside the folder.
touch foldet/flolder .gitkeep
creates an empty text file
git show “SHA-1”
Shows the whole commit, q to quit out of it
git show –format=oneline HEAD^^
Show info from 2 commits behind HEAD
git diff “SHA-1 Nr” “fileName”
Compare the file from specified commit with curent status.
git diff “SHA-1 Nr” “SHA-1 Nr”
git diff –stat –summary “SHA-1 Nr”..HEAD
git diff -w “SHA-1 Nr”..HEAD
Ignores all space changes
It's considered good practice to create feature branches in git when working on new functionality. The problem with this is that knowing which branch you are in is not obvious.
Pasting the following into your .bashrc file will display the current branch in your prompt. Doing this in .bashrc file wil also modify your normal prompt but only show colored branch name when you are inside a git folder.
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \[\1\]/'
}
function proml {
local BLUE="\[\033[0;34m\]"
local DEFAULT="\[\033[0m\]"
# OPTIONAL - if you want to use any of these other colors:
local RED="\[\033[0;31m\]"
local LIGHT_RED="\[\033[1;31m\]"
local GREEN="\[\033[0;32m\]"
local LIGHT_GREEN="\[\033[1;32m\]"
local WHITE="\[\033[1;37m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
# END OPTIONAL
PS1="\W \u$BLUE\$(parse_git_branch) $DEFAULT\$"
}
proml