Probably the sharpest git repository organizer & rebase/merge workflow automation tool you've ever seen
Project description
git-machete
💪 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.
Install
We suggest a couple of alternative ways of installation.
Instructions for installing bash, zsh, and fish completion scripts are provided in completion/README.md.
git-machete requires Python >= 3.6. Python 2.x is no longer supported.
Using Homebrew (macOS)
brew tap VirtusLab/git-machete
brew install git-machete
Using Snappy (most Linux distributions)
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).
Using PPA (Ubuntu)
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
Using rpm (Fedora/RHEL/CentOS/openSUSE...)
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
.
Using AUR (Arch Linux)
Install the AUR package git-machete using an AUR helper of your preference.
Using Nix (macOS & most Linux distributions)
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
Using pip with sudo (system-wide install)
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.
Using pip without sudo (user-wide install)
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.
Quick start
Discover the branch layout
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.
See the current repository state
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.
Rebase, reset to remote, push, pull all branches as needed
git machete traverse --fetch --start-from=first-root
Put each branch one by one in sync with its parent and remote tracking branch.
Fast-forward current branch to match a child branch
git machete advance
Useful for merging the child branch to the current branch in a linear fashion (without creating a merge commit).
GitHub integration
Annotate the branches with GitHub PR numbers:
git machete github anno-prs
Check out the PR into local branch, also traverse chain of pull requests upwards, adding branches one by one to git-machete and check them out locally:
git machete github checkout-prs <PR_number>
Create the PR, using the upstream (parent) branch from .git/machete
as the base:
git machete github create-pr [--draft]
Sets the base of the current branch's PR to its upstream (parent) branch, as seen by git machete:
git machete github retarget-pr
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 content of the .github-token file in the home directory (
~
). This file has to be manually created by the user. - The auth token from the current
gh
configuration. - The auth token from the current
hub
configuration.
Reference
Find the docs at Read the Docs.
You can also check git machete help
and git machete help <command>
.
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 compatibility
git-machete (since version 2.13.0) is compatible with git >= 1.8.0.
Contributions
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for git_machete-3.5.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | df87981c57f25b967558701b2bea790ffaccff0dc7c448e68113ed5ea824d3b0 |
|
MD5 | 685c73f91db868d35728f719bc3815dd |
|
BLAKE2b-256 | 70e4ff2a3adcd20e2428fa3b8b83f94a6abce7855f92ea127973e90764f36370 |