---
title: Git Flow At Vitwit
tags: Git, Github, Gitlab
description: A basic introduction on how to optimize your git ops.
---
# Basics of git
---
### The Basic Git Flow Diagram:

---
---
### Usage flow
* Master `protected, nobody touches it until first release`
* Beta `Replica of Master, used for canary releases, hot fixes`
* Test `Used by testing professional/s to validate the work done by the dev team - (load,stress,performance testing)`
* Dev `Almost like a local env, can be on a server or not, devs take responsibility for the ops of this env`
* Feature Branches `eg: signup, signin, profile or file upload, authentication/authorization`
---
#### ```checkout from dev -> make your changes -> git add (generally specific files) -> commit each feature progress -> pull from your parent (dev in this case) -> solve any merge conflicts if present -> add/commit them again -> push them ```
---
### Cat Ate My Code:
---

---
## Some Useful git commands
- go back to some commit?
- first check the previous git commit history with ```git log```
- copy the commit hash and checkout to it ```git checkout <commit-hash>```
- Accidental Commit, How to remove it?
- Soft Reset
- Go to some git history, without deleting any of your commits, you can always come back to you current code in time
- #### ```git reset --soft <commit-hash,branch>```
- #### ```git reset --soft @HEAD{1}```
- Hard Reset
- Go to some git history but will delete any if your uncommitted code, probably there's no way to get your code babck
- #### ```git reset --hard <commit-hash, branch>```
- #### ```git reset --hard --hard @HEAD{1}```
- #### ``` HEAD~~``` go back two commits
- #### ```HEAD ^^``` go back two commits
`~ is used for single parents, single branch`
`^ used for multiple parents, in case of parents with merged requests`
- once you've reset your base, you can commit again, and push your code to repo using
#### ```git push -f <branch-name>```
# :bulb: TIPS
* Always use ssh method to clone your repos
* ```git stash``` can undo all of your work
* ```git stash pop``` can bring back that undone work
* make use of ```git reflog```
* always make notes of your hashes, in case you mess up
* HEAD@{1} means go back to previous commit by 1
* use git-tokens for deployments
* or even deploy keys with restricted perms
---
---
# :100: :muscle: :tada:
---
### Wrap up
- Git takes care of your code, dont panic
- Always add meaningful commit messages
- Keep Learning :tada:
---