> For the complete documentation index, see [llms.txt](https://lukasz-nowakiewicz.gitbook.io/resources/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lukasz-nowakiewicz.gitbook.io/resources/git/branching-and-merging.md).

# Branching and Merging

Branches allow you to do the following:

* create new features
* apply hotfixes, quick changes
* record the history of the project

| # | Command                           | Description                                                          |
| - | --------------------------------- | -------------------------------------------------------------------- |
| 1 | `git branch`                      | Show the list of all branches.                                       |
| 2 | `git branch [branch_name]`        | Create a new branch using the current working directory as its base. |
| 3 | `git checkout [branch_name]`      | Switch the branch.                                                   |
| 4 | `git checkout -b [branch_name]`   | Create and switch to a new branch.                                   |
| 5 | `git merge [branch_name]`         | Merge \[branch\_name] into the current checked-out.                  |
| 6 | `git merge --no-ff [branch_name]` | Force a merge commit even if git could do a fast-forward merge.      |
| 7 | `git branch -d [branch_name]`     | Delete a branch (only for merged changes).                           |
| 8 | `git branch -D [branch_name]`     | Force to delete a branch even if contains unmerged changes.          |
| 9 | `git rm [file]`                   | Remove a file from the working directory and stop tracking it.       |
