Note that tags are personal and they are not automatically updated for all the users when you update them, so the best practice is to always create a new tag instead of deleting an old one if the tag is already on the remote
git log <branch/tag/commit> <filename>
shows the parent commits that did update that file
git log <branch> ^<to_be_excluded_with_its_parents
git log A...B
commit difference between two operands
git log --pretty=oneline
git diff master..test
find the difference between two branches
git diff master...test
find differences from common ancestor with test
git diff --cached
git merge branchname
merges the development in the branch branchname into the current branch
git diff --ours (--theirs) <filename>
git merge --abort
return to pre-merge status
git commit --amend
which will replace the old commit by a new commit incorporating your changes
git show HEAD@{"1 week ago"}
allows you to see the history of what you’ve checked out, useful if you delete branch you should not have deleted
reflogs are kept for 30 days, it works for local changes
git fsck
examine dangling objects
git rebase other-branch
git rebase --continue
git rebase --abort
git rebase -i HEAD~5
git rebase --onto branch1 branch2 branch3
git rebase --onto topicA~5 topicA~3 topicA