A cli that enhances git.
- Download the artifact for your platform from the releases page.
- Extract the binary and place it somewhere it can be found in your PATH.
- To get shell completions, run
feature completions <shell>. More instructions can be found in the docs.
Clone the repo and run cargo install --path . from the projects root. If you have just, run just install.
Read the files in ./contributing to understand procedures and conventions used for this project.
Feature's main purposes are:
- to simplify existing git commands
- to automate more complex tasks, like pruning merged branches
- to prettify and simplify command outputs
Feature uses the concept of a base branch in a lot of places. A base branch is the branch which a feature branch started from, and is intended to be merged back into when complete.
Feature uses these base branches automatically in places where it makes sense. For example, feature update rebases the current branch onto its base, no arguments needed. feature prune checks branches against their base to see if they can be safely deleted.
While feature's functionality is generally meant to work with the concept of feature and base branches, there are some commands that are useful in general:
sync- probably feature's most useful command. It's a general purpose command to sync the entire repo. This updates all branches to their upstreams, deletes unneeded branches, updates git submodules, and syncs each feature project.startandcommittake all trailing command line args and put them together to form a branch name or commit message, respectively.commit,status, andlistprint a customized outupt that is much more detailed, compact, and colorful than git's default output
I'm using a bash alias to use
ftinstead offeature
Commit
Status
First push without any cli options
Here's a summary of the feature workflow:
- Switch to a base branch.
- Start a feature branch with
feature start ….- tip: instead of switching to the branch first, you can use
feature start --from <base> …
- tip: instead of switching to the branch first, you can use
- Begin implementing the feature.
- If it's a new day, check
feature stto remember where you were and what changes you have. - Finish and commit with
feature commit …. - If some time has passed, or you know that there are new changes on the base branch, run
feature update. - Push changes to remote with
feature push. - Use your repository hosting service (GitHub, Gitlab, etc.) to bring the changes into the base branch.
- Clean up feature branch and switch back to base with
feature end. - Update and clean up all branches with
feature sync.


