Git
Homepage / Notes / Computer Science / Tools / Git
Commands
- Start a new repo: 
git init - Add files to be committed: 
git add - Check status: 
git status - Commit: 
git commit -m "commit message" - Push: 
git push origin {branch} - Start a new branch: 
git checkout -b {branch}(new:git switch?) git log -plists git commit history with thediffgit show {hash}show commit{hash}details- Search based on commit message with: 
git log --grep="{search_term}" 
Stash
- Put away uncommitted changes: 
git stash - Re-apply stashed changes: 
git stash pop - Re-apply stashed changes AND keep the changes in the stash: 
git stash apply - List stashes: 
git stash list - Annonate stash with a message: 
git stash save "message"(new:git stash push "message") - Specify a stash to re-apply: 
git stash pop stash@{2} - View stash diff: 
git stash showFull diff:git stash show -p - Creating a branch from a stash: 
git stash branch {branch} stash@{1} - Delete a specific stash: 
git stash drop stash@{1} - Delete all stashes: 
git stash clear 
Fixup
git commit --fixup {commit-sha}
Allows to "amend" a commit older than the very last commit
Squash
While a git rebase -i, commits are listed in chronological order (reverse of git log). If you'd like to squash a commit, it has to be in the middle or the bottom, can't be at the top.
Autosquash
git rebase -i --autosquash
Automatically squash fixup-type commits
Submodules
Add a submodule repo to an existing repo: git submodule add {url}
Notice the new .gitmodules file and the submodule repo as a directory
Even though it is a directory in the main repo, git sees it as a particular commit from the submodule repo and doesn't track its content
Resources
https://git-scm.com/book/en/v2/Git-Tools-Submodules
.gitignore
https://git-scm.com/docs/gitignore A .gitignore file lists the files to be ignored by Git. Multiple .gitignore files can be present in the same repo (in subdirectories…).
Tools
CLI tool for a more visual git: https://jonas.github.io/tig/
Resources
(locally) squashing multiple commits using rebase
http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html