I’m not coding that often, but when the exception happens I often end up with a ‘task’ and the knowledge that there is a better way to handle the source code - but I can’t remember!
Therefore I note here some plain and ordinarily commands, don’t expect fancy tricks as it is more a mnemonic for me. Head for details better to the official git reference. Some time ago I posted some git basics to get started, which should be still valid!
Instead of re-writing git man-pages I organized it by thinking in workflows
Add all files to the staging area and comment the change
$ git add . $ git commit -m "change awesome things"
or in one line:
$ git commit -a -m "change awesome things"
To add annother ‘change’ to the last commit, do:
$ git add other_file $ git commit --amend
This replaces the tip of the current branch by creating a new commit, so be careful changing already pushed commits. In that case you have to force the push, because it rewrote the history.
To undo the last commit and redo - better do:
$ git reset --soft HEAD^ $ vim my_file $ git commit -a -c ORIG_HEAD
or revert to previous state/head, e.g. to commit 87de91f
$ git reset --hard 87de91f
Finally save local modifications to a stash … do something not related … and finally re-apply the stashed changes.
$ git stash $ git stash pop
Select a commit ‘3e2734c52’ from an other branch.
$ git cherry-pick 3e2734c52
Apply changes introduced by the second last and last commit pointed to by master, but do not create any commit yet.
$ git -n cherrypick master~1 master
To get the remote with commits not present in your local branch AND vice versa
in sync do
git rebase origin master.
Extract two topmost commits from the current branch and format them as email-able patches:
$ git format-patch -2
Apply a series of patches from a mailbox or a given one, e.g. ‘0001-use-unicorn-via-procfile’.
$ git am 0001-use-unicorn-via-procfile.patch
Fall back on 3-way merge if the patch does not apply cleanly:
$ git am --3way 0001-use-unicorn-via-procfile.patch
Create a new branch, merge and delete it:
$ git checkout -branch featureA $ git merge featureA $ git branch --delete featureA # remove localy $ git push origin :featureA # remove remote
If this does not work, because meanwhile master got further commits
$ git mergetool featureA
might help or try to solve conflicts by:
[featureA]$ git rebase -interactive master [featureA]$ git checkout master [master]$ git merge --no-ff featureA
If push is rejected, because of a non-fast-forward merge, force it
$ git push -f origin featureA
or use the
-f to overwrite remote-master with featureA-branch
$ git push -f heroku featureA:master
$ git branch --all # List all branches $ git branch --remote # or only remote ones. $ git branch --move <old> <new> # Rename old to new.