Probably the sharpest git repository organizer & rebase/merge workflow automation tool you've ever seen ;)
💪 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 statusgives 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 traversesemi-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.
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 works under both Python 2.7 and Python 3.x.
shell script 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.
shell script 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-commonfirst if
add-apt-repositoryis not available on your system.
shell script 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:
shell script 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
pipinstalled from system packages.
shell script sudo -H pip install git-machete
Tip: pass an extra
-Uflag to
pip installto upgrade an already installed version.
You need to have Python and
pipinstalled from system packages.
shell script pip install --user git-machete
Please verify that your
PATHvariable has
${HOME}/.local/bin/included.
Tip: pass an extra
-Uflag to
pip installto upgrade an already installed version.
shell script cd your-repo/ git machete discover
See and possibly edit the suggested layout of branches. Branch layout is always kept as a
.git/machetetext file.
shell script 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.
shell script git machete traverse --fetch --start-from=first-root
Put each branch one by one in sync with its parent and remote tracking branch.
shell script git machete advance
Useful for merging the child branch to the current branch in a linear fashion (without creating a merge commit).
See
git machete helpand
git machete helpfor 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.7.10.
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.