A tool to generate a Git commit with a specific hash part.
Project description
hashcommit
A tool to generate a Git commit with a specific hash part.
Prerequisites
Ensure you have Git installed on your system.
Installation
You can install the package using pip:
pip install hashcommit
Demo
This repository's history was rewritten using the rewrite_the_history.sh
script and each new commit is added by using the hashcommit
command. You can check the result here.
Usage
Creating a New Commit
To create a new commit with a specific hash part:
hashcommit --hash <desired_hash_part> --message "<commit_message>"
Overwriting the Last Commit
To overwrite the last commit with a specific hash part:
hashcommit --hash <desired_hash_part> --message "<commit_message>" --overwrite
Match Type
You can also specify if the hash must begin with, contain, or end with the desired string using the --match-type
option. The default is to match the beginning of the hash:
hashcommit --hash <desired_hash_part> --message "<commit_message>" --match-type <begin|contain|end>
Example Usage
To find and use a specific commit hash:
hashcommit --hash fff --match-type contain --message "foobar" ; git log -1 | cat
Example output:
Found matching commit hash: 93fffe4756192c250a7234c7c5fd81752c747091
commit 93fffe4756192c250a7234c7c5fd81752c747091
Author: Your Name <your-email@domain.com>
Date: Thu May 23 17:06:24 2024 +0000
foobar
Author Preservation
By default, the author is preserved when overwriting. To overwrite the author, use the --no-preserve-author
option:
hashcommit --hash <desired_hash_part> --overwrite --no-preserve-author
Overwriting Commits in the Past
You can overwrite the existing commit that has other commits on top of it. To do this, use the --commit
option:
hashcommit --hash <desired_hash_part> --overwrite --commit <commit_hash>
Rewriting the History
You can rewrite the history of the current branch using the rewrite_the_history.sh
script. This script will recreate the commit history, ensuring that each commit's hash conforms to a sequence specified by the -d
argument, which sets the number of digits for the sequence number.
For example, to rewrite the history with a two-digit sequence number at the beginning:
./scripts/rewrite_the_history.sh -d 2
Note: The default value for -d
is 3. As the number of commits increases, consider adjusting the digit value accordingly to balance performance and the required hash length.
Development
To develop or contribute to this project, clone the repository and install the dependencies:
git clone https://github.com/wozniakpl/hashcommit.git
cd hashcommit
pip install -e .
Running Locally
You can run tests locally using tox or act:
# Using tox
tox
# Using act
act
You can use the following command for simplicity of development. It formats the code, runs the checks, and the tests on one Python version:
tox -e format && tox -e checks && tox -e py312 --
To run tox tests under docker (not using your git):
docker compose up
To set up an environment with hashcommit
installed and a git repository initialized in the /repo
directory, use Docker Compose:
docker compose run --rm --workdir /repo test bash
License
This project is licensed under the MIT License.
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 hashcommit-0.1.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c6459730b241656e0eb6e652db0764c5c0449909adb5f38eaba58320423a025 |
|
MD5 | ec62e832b609210a14511110c7e920d2 |
|
BLAKE2b-256 | ede30df18fb580de56f58c8cfb8504a9dc5ace3f1e4d49681ccaf38688ef2a19 |