Configure Settings
git config --global user.name "Bob B"
git config --global user.email bob@example.com
git config --global core.editor nano
git config user.name "Bob B"
git config user.email bob@example.com
git config core.editor nano
git config --local user.name "Bob B
git config --local user.email bob@example.com
git config --local core.editor nano
git config --list
git config --list --local
git config --list --global
git config --list --system
More infos: git book, atlassian
Stash
stash changes:
git stash
remove latest stash from storage and apply it:
git stash pop
apply latest stash, keep in storage:
git stash apply
list all stored stashes:
git stash list
list with dates when stashed:
git stash list --date=local
show contents / patch of stash:
git stash show -p 2
or
show -p stash@2
stash also untracked files:
git stash save -u
pop a specific stash:
git stash pop 1
or
pop stash@1
delete all stashes:
git stash clear
delete latest (top) stash:
git stash drop
delete a specific stash
git stash drop 2
or
drop stash@2
stash a specific path (more info):
git stash push suites/bob/test.py
Add Files to Commit
add multiple files:
git add file1.txt file2.py file3.go
add all files in current directory:
git add .
add all files in foo/bar directory:
git add foo/bar
Status
check the status of local vs remote changes:
git status
Commit
commit all added changes in working area:
git commit -m "hello"
change previous commit message (before push)
git commit --amend
merge with squash (more info):
git merge --squash dev
Log
show commit log:
git log
git log --oneline
git log master
git log origin/master
git log V1.0.0
git log -- src/create_tables.sql
git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
more on last line above / author and date: SO
show changes in a commit:
git show SHA1
show only modified files in a commit:
git show 10c52da68e77c1ba846b3925ceeb5c40c738d16a --name-only
or a shorter hash works:
git show 10c52da68e --name-only
Diff
diff working dir vs branch:
git diff
diff in staged/added files vs committed branch:
git diff --cached
or
git diff --staged
diff of working copy vs specific commit:
git diff --staged 10c52da68e
diff two commits, show d19bfca as added:
git diff f197ff4 d19bfca
diff specific file only:
git diff myfile.py
diff specific files:
git diff myfile.py myfile2.py
Apply Diff as Patch
save diffs to file:
git diff > mypatch.patch
git diff --cached > mypatch.patch
apply the saved diff to local directory:
git apply mypatch.patch
check patch without applying it:
git apply --check ../../mypatch.patch
Branches
create local branch, do not switch:
git branch mynewbranch
switch branch:
git checkout refactoringbranch
create new branch and switch to it:
git checkout -b mynewbranch
list all branches (including remote):
git branch -a
delete local branch:
git branch -d mynewbranch
reset all files to match given remote/branch:
git reset --hard origin/master
show which branches are merged to current branch:
git branch --merged
show which branches are not yet merged:
git branch --no-merged
Remotes
check which remote current branch is tracking SO:
git remote -v
git branch -vv
git remote show origin
change remote for current branch SO:
git branch -u origin/mynewbranch
change remote url:
git remote set-url origin new.git.url/here
rename remote (locally):
git remote rename pb paul
remote local reference to a remote:
git remote remove paul
Reset files
reset a file:
git checkout db/create.py
force filename (vs eg. branch name):
git checkout -- origin/refactoring.py
clean workspace, delete changes:
git clean -xfd
git pull --rebase
#https://git-scm.com/docs/git-clean
#-x = delete also .gitignore defined files, dont want that
#-f = force delete, often required by git config
#-d = remove also untracked directories
git clean -fd
Shell Prompts
creating a shell prompt with branch name, colors, etc:
https://jonasjacek.github.io/colors/
Moving to zsh, part 6 – Customizing the zsh Prompt
https://superuser.com/questions/943844/add-timestamp-to-oh-my-zsh-robbyrussell-theme/943916
for bash etc, slightly different but the internet helps
~/.zshrc example:
PROMPT='[%D{%b/%d,} %T] %2~ %%'
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
setopt PROMPT_SUBST
PROMPT='[%B%F{12}%D{%b/%d,} %T, $(parse_git_branch)]%b%F{0} %2~ > '