💪 git-machete is a robust tool that simplifies your git workflows.
🦅 The bird's eye view provided by git-machete makes merges/rebases/push/pulls hassle-free
even when multiple branches are present in the repository
(master/develop, your topic branches, teammate's branches checked out for review, etc.).
🎯 Using this tool, you can maintain small, focused, easy-to-review pull requests with little effort.
👁 A look at a git machete status
gives an instant answer to the questions:
- What branches are in this repository?
- What is going to be merged (rebased/pushed/pulled) and to what?
🚜 git machete traverse
semi-automatically traverses the branches, helping you effortlessly rebase, merge, push and pull.
🔌 See also VirtusLab/git-machete-intellij-plugin — a port into a plugin for the IntelliJ Platform products, including PyCharm, WebStorm etc.
We suggest a couple of alternative ways of installation.
Bash and zsh completion scripts are provided in completion/ directory, see wiki for their installation instructions.
git-machete requires Python >= 3.6. Python 2.x is no longer supported.
brew tap VirtusLab/git-machete
brew install git-machete
Tip: check the guide on installing snapd if you don't have Snap support set up yet in your system.
sudo snap install --classic git-machete
It can also be installed via Ubuntu Software (simply search for git-machete
).
Note: classic confinement is necessary to ensure access to the editor installed in the system (to edit e.g. .git/machete file or rebase TODO list).
Tip: run sudo apt-get install -y software-properties-common
first if add-apt-repository
is not available on your system.
sudo add-apt-repository ppa:virtuslab/git-machete
sudo apt-get update
sudo apt-get install -y python3-git-machete
Download the rpm package from the latest release
and install either by opening it in your desktop environment or with rpm -i git-machete-*.noarch.rpm
.
Install the AUR package git-machete using an AUR helper of your preference.
On macOS and most Linux distributions, you can install via Nix:
nix-channel --add https://nixos.org/channels/nixos-unstable unstable # if you haven't set up any channels yet
nix-env -i git-machete
You need to have Python and pip
installed from system packages.
sudo -H pip install git-machete
Tip: pass an extra -U
flag to pip install
to upgrade an already installed version.
You need to have Python and pip
installed from system packages.
pip install --user git-machete
Please verify that your PATH
variable has ${HOME}/.local/bin/
included.
Tip: pass an extra -U
flag to pip install
to upgrade an already installed version.
cd your-repo/
git machete discover
See and possibly edit the suggested layout of branches.
Branch layout is always kept as a .git/machete
text file.
git machete status --list-commits
Green edge means the given branch is in sync with its parent.
Red edge means it is out of sync — parent has some commits that the given branch does not have.
Gray edge means that the branch is merged to its parent.
git machete traverse --fetch --start-from=first-root
Put each branch one by one in sync with its parent and remote tracking branch.
git machete advance
Useful for merging the child branch to the current branch in a linear fashion (without creating a merge commit).
git machete anno --sync-github-prs
This will automatically annotate the branches with GitHub PR numbers.
Note: for private repositories, a GitHub API token with repo
access is required.
This will be resolved from the first of:
- The
GITHUB_TOKEN
env var. - The auth token from the current
gh
configuration. - The auth token from the current
hub
configuration.
See git machete help
and git machete help <command>
for reference.
Take a look at reference blog post for a guide on how to use the tool.
The more advanced features like automated traversal, upstream inference and tree discovery are described in the second part of the series.
git-machete (since version 2.13.0) is compatible with git >= 1.8.0.
Contributions are welcome! See contributing guidelines for details. Help would be especially appreciated with Python code style and refactoring — so far more focus has been put on features, documentation and automating the distribution.