Useful Commands: Git
Applying Patches
Get the patch file by viewing the Pull Request or commit in GitHub and adding .patch
to the end:
https://github.com/PurpleTurtleCreative/grouped-content/pull/48.patch
Right-click the page of raw text and Save As...
to your computer as a .patch
file.
Apply the patch file (source). File paths are relative to your current location, so you should be at the top-level of the repo:
cd ~/sites/wp-grouped-content
git apply --reject --whitespace=fix /path/to/mychanges.patch
Find reject files for review:
find . -name "*.rej"
Automatically open all reject files for review in Sublime Text, Mac OSX:
find . -name "*.rej" | xargs open -a "Sublime Text"
Remove Commits from Pull Request
Sometimes you’ll find your Pull Request on GitHub contains unrelated commits that you don’t want polluting your branch’s or PR’s log. Use interactive rebase to remove the undesired commits and then force push the changes back up to the remote. (source)
git checkout my-pull-request-branch
git rebase -i HEAD~n
# where 'n' is the number of last commits you want to include in interactive rebase.
# Replace pick with drop for commits you want to discard.
# Save and exit.
git push --force
Automatically Set Remote HEAD ref
If you change the HEAD branch of a remote, you’ll likely encounter the error:
fatal: ref refs/remotes/origin/HEAD is not a symbolic ref
You can fix it automatically with this command:
git remote set-head origin -a
List Tags with Commit SHAs
Tags are their own objects, which you can see by running:
git show-ref --tags
To know which commits each tag actually points to, dereference them and clean up the output:
git show-ref --tags -d | grep -F '^{}' | sed -e 's#refs/tags/##' | sed -e 's#\^{}##'
If your shell supports extended regex for the sed
command, then this can be shortened to:
git show-ref --tags -d | grep -F '^{}' | sed -E 's#refs/tags/(.+)\^\{\}#\1#'