Git
Decentralized version control system.
Searching for when a given string was introduced
When you want to find out which commit first referenced a given string:
git log -S <string to search for> --source --all
See this stackoverflow answer.
Reverting commits without creating a new one
This is useful when you want to revert a set of commits, but also when you want to change them before committing again.
git revert -n <commit hashes to revert>
Deleting multiple local branches
git branch -d $BRANCH_NAME
will delete a local branch IFF it’s been merged with the upstream branch (or remote). If you pass in --force
, then it’ll delete it regardless. git branch -D $BRANCH_NAME
is a shorthand for git branch -d --force $BRANCH_NAME
.
git branch -D prefix*
doesn’t work (git won’t do the name completion for you). Instead, something like this will work:
git branch | grep "$PREFIX_STRING" | xargs git branch -D
Rebasing a branch onto another one.
Say you branch off my_work
from develop
. But you later find out you need to merge it into master
. How do you merge only the commits from my_work
into master
without including other commits from develop
?
As with most things in software, stackoverflow has the answer.
git checkout my_work
git rebase --onto master develop my_work
That is, you rebase onto the target branch, from the original branch point, with the branch you want to move.
Submodules
Submodule are a neat, basic way to manage dependencies.
Adding one is easy
git submodule add SUBMODULE_URL
When you’re not the one who added it, the command to pull down the submodules is less obvious.
git submodule update --init --recursive
Generating and Applying Patches
Patch files are files (duh) describing changes between one version to another. They can be easily created by piping git diff $SOURCE_COMMIT $TARGET_COMMIT
to a file. Or, for changes from HEAD to whatever’s being worked on, a simple git diff
.
Once you have the patch, you can then apply it with git apply $PATH_TO_FILE
, so, for example:
git diff > change.patch
git co .
git apply change.patch
Which is a less elegant version of git stash
.
Stop tracking changes to a file
Use git rm --cached
on the file(s), and add them to the ignore patterns.
Last updated: 2020-06-21 10:18:22 -0700