Collection of intermediate but handy git tricks. This post will be updated now and then.

Apply patch from email

git am -3 --signoff <name of patch>.patch

Bisect

<object id> could be master, 35f1cab or v1.4, for example.

git bisect start
git bisect good <object id>
git bisect bad <object id>
# test the given revision
# say if it's bad or not with
git bisect bad
# continue this way and exit with
git bisect reset

Branch off commit

git branch new_branch <ref>

Commit part of diff from a file

git add -p

Create emailable patch

# edit
# commit
git format patch origin/master --stdout > my_changes.patch

Where origin/master is the base for references.

Discard parts of a diff

git checkout -p
# is hunk too big? 's' to split it

Merge commits

If you want to add some changes that you'd want included in the previous un-pushed commit

git commit -am "just a commit"
# make changes
git commit --amend -a

Move hunk of commit to another commit

git rebase -i HEAD~2
# p ...
# e ... <- edit this
#edit files
# git add; git commit --amend; git rebase --continue

Remove remote branch

git push <remote> :<branch>

Show log with patches

git log -p
# for a specific file
git log -p <path>