A terminal UI (built with Textual) for moving work between git branches at the file level — pick the final state of the files you want and apply them to another branch as one clean commit, no commit-by-commit cherry-picking.
It ships two tools as tabs in one TUI:
- Cherry Files Diff — see every file added, modified, or deleted on a branch since it diverged from its base, grouped as a scannable tree.
- Cherry Files Picker — select files from your current branch and commit their current content onto a target branch.
The idea
I often encountered a scenario where a file or several files were modified across multiple commits. And by the time they where ready to push to production, I had to manually select all the commits related to those files, to cherry pick them and merge them into production.
Then, I realized what I really wanted was the final result, the approved code version of the files, not the detailed history of commits.
This project is a new iteration of my previous Cherry Files Picker. The goal is the same — move the final state of selected files between branches as one clean commit — but this version upgrades the UI to a full TUI and adds a second module, Cherry Files Diff, for understanding branch divergence at a glance.
Install
Recommended for regular use — pipx installs the tool in its own isolated environment and makes the command available everywhere:
pipx install cherry-files-toolkit
If you are installing from a local checkout while developing, use an editable install instead:
python -m venv .venv
source .venv/bin/activate
pip install -e .
Requires Python 3.10+ and git on your PATH.
Usage
Run it from inside any git repository:
cherry-files-toolkit
The app opens with Cherry Files Diff selected. Use the footer shortcuts to move between tabs:
Ctrl+1— Cherry Files DiffCtrl+2— Cherry Files PickerCtrl+Q— quit
Cherry Files Diff tab
Explains branch divergence at the file level, so you can recover context on a branch you don't know well:
- Pick the divergent branch (the one with the work) and its base branch.
- Start Diff Checker finds the point where they diverged and lists every file created, modified, or deleted since — with per-category counts and a directory tree for fast scanning.
Cherry Files Picker tab
Transfers the final approved state of selected files from your working branch to another branch:
- Source branch is pre-filled with your current branch.
- Pick a target branch — where the work should land.
- Search and select the files to move. Selections persist while you filter.
- Write a commit title and description, review the selected files, and hit Cherry Pick Files. The toolkit commits those files' current content onto the target branch in a single commit.
Use it when you know which files are done and want them on another branch without replaying the messy commit history that produced them.
License
Release files for cherry-files-toolkit 1.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cherry_files_toolkit-1.0.3.tar.gz | 9.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cherry_files_toolkit-1.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.9 kB
Release files / cherry_files_toolkit-1.0.3.tar.gz
| Download URL | cherry_files_toolkit-1.0.3.tar.gz |
|---|---|
| Size | 9.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4dd450e7f5bde2a5bd962e2728b71cfbac4fb9f0fa118db1ab2024dc8653be44
|
|
BLAKE2b-256 checksum How to use checksums |
04288da30b74a52fdd5382c6b56d272d2d23df7e36d25f136cc8726e4c78e621
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / cherry_files_toolkit-1.0.3-py3-none-any.whl
| Download URL | cherry_files_toolkit-1.0.3-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c0064010d86bf2d1dc2d10d8b929ae4684ec598398c06d3811693963a20721d3
|
|
BLAKE2b-256 checksum How to use checksums |
eb492ab4a987d7fa95537021fce083c0c0e7e710700f38becf186c79231899c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|