git-cl
A pre-staging layer for organising changes in Git
git-cl is a command-line tool that brings changelist support to Git, inspired by Subversion. It adds a pre-staging review layer that lets you organise modified files into named groups before staging or committing. Changelists can be stashed selectively and promoted to dedicated branches — enabling a late-binding branching workflow where the branch decision follows the code, not the other way around.
Features
Workflow
- Pre-staging review: group changed files by intent before staging
- Organise multiple concerns on a single branch
- Stage and commit changes by intent
- Stash changelists and resume work later
- Late-binding branching: promote a changelist to a dedicated branch
Scope: operates at file level — patch-level editing is left to other Git tools.
Technical
- Local-only metadata (
.git/cl.json) - Simple CLI:
git cl <command> - Interoperable with community VS Code extension
Demo
Quick Start
Install via pip
pip install git-changelists
The PyPI package is named git-changelists to avoid namespace conflicts; it installs the git-cl command.
Install via wget
mkdir -p ~/bin
wget https://raw.githubusercontent.com/BHFock/git-cl/main/git-cl -O ~/bin/git-cl
chmod +x ~/bin/git-cl
Make sure ~/bin is listed in your $PATH.
Verify installation
git cl --version
git cl help
Use changelists inside a Git repository
git cl add fixup file1.py
git cl status
git cl commit fixup -m "Fix file1"
Common Commands
# Add files to a changelist
git cl add docs-fix README.md docs/index.md
# See changes grouped by changelist
git cl status
# Stage or commit changelists
git cl stage docs-fix
git cl commit docs-fix -m "Update documentation layout and intro"
# Keep the changelist after committing
git cl commit docs-fix -m "Fix bug" --keep
# Remove a file from its changelist
git cl remove README.md
# Delete a changelist
git cl delete docs-fix
# Late-binding branching: create a branch from a changelist (auto-stash/unstash)
git cl br docs-fix
Documentation
📘 Tutorial: Guide with examples and FAQ
📘 Design Notes: Technical architecture
📘 Tests: Test suite and shell walkthroughs
📘 Why git-cl exists: History and motivation
📘 Paper: Design, workflow, and related work
Notes
- Requires Python 3.9+ and Git
- Local-only; designed for single-user workflows
- Always inspect downloaded scripts before executing, see source
- For security concerns, see SECURITY
License
BSD 3-Clause — see LICENSE | CONTRIBUTING
Release files for git-changelists 1.1.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| git_changelists-1.1.12.tar.gz | 58.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| git_changelists-1.1.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 91.3 kB
Release files / git_changelists-1.1.12.tar.gz
| Download URL | git_changelists-1.1.12.tar.gz |
|---|---|
| Size | 58.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c92c5bdb8a29fd102466df901c7cee27eebb07698d8567996099646bb023ce49
|
|
BLAKE2b-256 checksum How to use checksums |
b39d6c0acfbe158e79328ab6f9b3827546b5114d5c6dab619163281056b50d2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / git_changelists-1.1.12-py3-none-any.whl
| Download URL | git_changelists-1.1.12-py3-none-any.whl |
|---|---|
| Size | 33.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a31cd816793f84130dc57a02c7dec779611352bf4c1c9926b14372d8f2f8f1b3
|
|
BLAKE2b-256 checksum How to use checksums |
5ae964432df78c527dcb61816efebe0139c01993bd64573ceb7aebe39503b714
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|