# git-brunch 
A git command-line tool to work with branches

## Features
- Quickly checkout local or remote branch
- Merge or rebase a branch
- Search for a branch
- Delete a branch
- Fetch / Update
## Usage
Run `git-brunch` or `git brunch`.
### Git alias (optional)
An alias like `git b` (or `gb`) is a good idea to quickly access the tool.
```sh
git config --global alias.b brunch
```
## Installation
The installation is possible in multiple ways, and there are binaries available to download.
### Download binary
1. Download from **[releases](https://github.com/andys8/git-brunch/releases)**
1. Rename the file to `git-brunch`
1. Make it executable with `chmod +x git-brunch`
1. Add to your `PATH`
### Arch Linux
`git-brunch` is in the [AUR](https://aur.archlinux.org/packages/git-brunch)
```sh
yay -S git-brunch
pamac install git-brunch
```
### FreeBSD
`git-brunch` can be installed from the official FreeBSD package repository
```sh
pkg install hs-git-brunch
```
### [Nix](https://nixos.org/nix)
`git-brunch` is part of the nix package manager
```sh
nix-env -i git-brunch
```
### [Stack](https://haskellstack.org)
`git-brunch` can installed with the Haskell build tool stack
```sh
stack install git-brunch # --resolver=lts-lts-20.4
```
### Install from source
`git-brunch` can be installed from source. It can be forked and modified, if you like to.
```sh
git clone https://github.com/andys8/git-brunch
cd git-brunch
stack install
# or nix-env -if .
```
## Development
### Run application
```shell
stack run
```
### Run tests
```shell
stack test --file-watch
```
### Build statically linked
```shell
stack install --flag git-brunch:static
```
### Generate nix
```sh
cabal2nix --shell . > default.nix
```
## Release
- Bump version in `package.yaml` and `default.nix`
- `stack build`
- Create a commit `v0.0.0`
- Create a tag `v0.0.0`
- Push commit and push tag
- Release on github will be created by CI
- Update release description
- `stack upload .`
- Update [AUR](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=git-brunch#n3)
## Related projects
- [`git-gone`](https://github.com/lunaryorn/git-gone): Lists or removes "gone" branches, that is, local branches which used to have an upstream branch on a remote which is now removed.
- [`lazygit`](https://github.com/jesseduffield/lazygit): Terminal UI for git commands
- [`gitui`](https://github.com/extrawurst/gitui): Terminal UI focused on speed in giant repositories