Configuration

git config --global user.email "[email protected]"
git config --global user.name "Daniele Salvagni"
git config --global core.editor nano
git config --global help.autocorrect 1

Basic commands

Remote

git remote add <alias> <url>  # add git URL as an alias
git remote show <alias>       # show information about remote
git fetch <alias>             # fetch down all the **branches** from that remote
git merge <alias>/<branch>    # merge a remote branch into current branch
git merge --abort             # abort the merge
git push <alias> <branch>     # transmit local branch to remote repository
git pull                      # fetch and merge any commits from remote

Stash

git stash             # save modified and staged changes
git stash -u          # include untracked files
git stash list        # list stack-order of stashed file changes
git stash pop         # write working from top of stash stack
git stash drop [id]   # discard the changes from top of stack or by [id]

# alternative to include a message
git stash save "your stash message"

Remove an ignored file from git

This will remove a file from git that has been added to .gitignore while keeping it in the working directory

git rm --cached <file>

Branches

git branch     # local branches
git branch -r  # remote branches
git branch -a  # all branches
git branch -av # all branches with details
git checkout -b <branch>  # create and switch to a new branch
git checkout -            # switch to the last branch
git branch -d <branch>    # delete a branch
git switch <branch>       # switch to a branch, look for remote

Tagging

git tag -a v1.0.0 -m "The first official version"
git show v1.0.0
git describe --tags

git push --tags
git push origin v1.0.0  # same effect

Rewrite history

Apply any commits of current branch ahead of specified one

git rebase <branch>

Clear staging area, rewrite working tree from specified commit

git reset --hard <commit>
git clean -df  # to remove untracked files

Amend the last commit

git commit --amend -m "New commit message"

git add forgotten_file
git commit --amend --no-edit

Advanced commands

Backup untracked files

git ls-files --others --exclude-standard -z |\
xargs -0 tar rvf ~/backup-untracked.zip

Sync with remote, overwrite local changes

git fetch origin && git reset --hard origin/master && git clean -f -d

Undo last commit but keep changed files in stage

uncommit = reset --soft HEAD~1

Reset a single file

To reset both the working copy and its state in the Git index to that of HEAD:

git checkout HEAD -- file.txt

Rebase local branch to remote master

git pull --rebase origin master

or

git fetch origin
git rebase origin/master

Counting commits

git shortlog -s -n

Blame someone else

git blame-someone-else "Name Surname <email@address>" <commit>

Install from: https://github.com/jayphelps/git-blame-someone-else

Overview

Git Overview