# summary on some steps in the git workflow ## Table of contents - [glossary](#glossary) - [branches](#branches) - [create a branch](#create-a-branch) - [submodules](#submodules) - [philosophies](#philosophies) - [merge](#merge) - [rebase](#rebase) ## terminology | term | description | | :--- | :---------- | | `^` | one commit back (in history), use `^` | | head | pointer to branch (usually latest commit, unless detached=pointer to specific commit) currently checked out locally | | index | keeps track of `staged/cached` (with git add) changes | | working tree | local file working directory | ## branches ### create a branch To create a branch use subcommand `branch` or `checkout` with flag `-b`: ```bash # create new branch ('base-branch' is optional) git branch git checkout -b # switch branch ('checkout -b' combines the 'branch' and 'switch' subcommands) git switch ``` ## submodules To fetch submodules of a cloned repository use: ```bash # do it manually git submodule init git submodule update # do it all at once git clone --recurse-submodules # if repo is already cloned git submodule update --init --recursive ``` ## philosophies Important things to always remember: **- do renaming in seperate commit** **- don't merge conflicts with directories** ### merge When following the philosophie of merging, one merges the target branch into ones working, solves all conflicts, tests the result and then merges the working branch into the target branch. This is done with ```sh # merges 'target-branch' into curret branch git merge # proceeds after solving merge conflict git merge --continue ``` ### rebase When following the philosophie of rebasing, one rebases the feature branch onto the target branch. This is done with ```sh # rebases current branch onto 'target-branch' git rebase # proceeds after solving rebase conflict git rebase --continue ```