--- title: Git homepage: https://git-scm.com tagline: | git: --fast-version-control --- To update or switch versions, run `webi git@stable` (or `@v2.30`, `@beta`, etc). ## Cheat Sheet > Git is a fast, scalable, distributed revision control system with an unusually > rich command set that provides both high-level operations and full access to > internals. Github's [Git 'Hello World'](https://guides.github.com/activities/hello-world/) is a good place to get started if you're new to git. ## Table of Contents - Files - Commit Files - Ignore Files - Create Branch - Rebase by Default - Rebase - Auth via Token ### Files These are the files / directories that are created and/or modified with this install: ```text ~/.config/envman/PATH.env ~/.gitconfig ~/.local/opt/git/ # Windows /Library/Developer/CommandLineTools/ # macOS ``` ### How to commit files ```sh git add ./path/to/file1 git add ./path/to/file2 git commit -m "my summary for this commit" ``` ### How to ignore common files In your project repository create a `.gitignore` file with patterns of fies to ignore ```text .env* *.bak *.tmp .*.sw* ``` ### How to create a branch This will branch from the branch you're currently on. ```sh git switch -c my-branch-name ``` ### How to rebase by default ```sh git config --global pull.rebase true ``` ### How to rebase > To "rebase" simply means to undo any of your changes, apply updates from > another branch first, and then replay your changes. Rebase when fetching new updates ```sh git pull --rebase origin master ``` Rebase a feature branch from master before a merge ```sh # update master git fetch git switch master git pull # go back to your feature branch git switch my-feature # start the rebase git rebase master # fix conflicts if you need to, and then continue git add ./my-merged-file git rebase --continue ``` ### How to authenticate git with deploy tokens Abbreviated from [The Vanilla DevOps Git Credentials & Private Packages Cheatsheet](https://coolaj86.com/articles/vanilla-devops-git-credentials-cheatsheet/): First, update `.gitconfig` to handle each type of git URL (git, ssh, and http) as https: ```sh git config --global url."https://api@github.com/".insteadOf "https://github.com/" git config --global url."https://ssh@github.com/".insteadOf "ssh://git@github.com/" git config --global url."https://git@github.com/".insteadOf "git@github.com:" ``` Next, create a `.git-askpass`: ```sh echo 'echo "${MY_GIT_TOKEN}"' > ~/.git-askpass chmod +x ~/.git-askpass ``` Finally, add the following ENVs to your deployment environment: ```sh GIT_ASKPASS="${HOME}/.git-askpass" # Relpace xxxx... with your deploy token MY_GIT_TOKEN=xxxxxxxxxxxxxxxx ``` In the case of Github it may be useful to create a read-only deploy user for your organization. This can work with Docker, Github, Gitlab, Gitea, CircleCI, and many more.