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
Metadata
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 | Provenance | Actions |
|---|---|---|---|---|
| git_changelists-1.1.12.tar.gz | 58.1 kB | Without provenance | Details for git_changelists-1.1.12.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| git_changelists-1.1.12-py3-none-any.whl | Python 3 | none | any | Details for git_changelists-1.1.12-py3-none-any.whl |
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
|
Security for git-changelists 1.1.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.