A Git history linter to ensure it stays clean for those who prefer a linear history without merge commits.
Clean Git History checks the commits from the current HEAD
(inclusively) till a provided Git reference(exclusively).
This reference can be a branch, commit or tag, just provide it as the final argument.
e.g.
clean_git_history "origin/main"
clean_git_history "v0.2.0"
clean_git_history "bac789b4cc5fce9a26d6805c5da4bf17241523f1"
name: Git History
on: pull_request
jobs:
clean:
name: Clean
runs-on: ubuntu-latest
steps:
- name: Checkout code.
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Install Clean Git history.
run: version="v1.0.4" && wget -O - "https://github.com/DeveloperC286/clean_git_history/releases/download/${version}/x86_64-unknown-linux-musl.tar.gz" | tar xz --directory "/usr/bin/"
- name: Check clean Git history.
run: clean-git-history "origin/${{ github.base_ref }}"
clean-git-history-checking:
stage: clean-git-history-checking
image: rust
before_script:
- version="v1.0.4" && wget -O - "https://github.com/DeveloperC286/clean_git_history/releases/download/${version}/x86_64-unknown-linux-musl.tar.gz" | tar xz --directory "/usr/bin/"
script:
- clean_git_history "origin/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}"
rules:
- if: $CI_MERGE_REQUEST_ID
Statically linked compiled binaries are available for download. Visit the releases page at https://github.com/DeveloperC286/clean_git_history/releases to see all the releases, the release notes contains links to binary downloads for various architectures.
version="v1.0.4" && wget -O - "https://github.com/DeveloperC286/clean_git_history/releases/download/${version}/x86_64-unknown-linux-musl.tar.gz" | tar xz --directory "/usr/bin/"
Cargo is the Rust package manager, the install
sub-command pulls from crates.io and then compiles the binary locally, placing the compiled binary at ${HOME}/.cargo/bin/clean_git_history
.
cargo install clean_git_history
By default it installs the latest version at the time of execution.
You can specify a specific version to install using the --version
argument.
For certain environments such as CICD etc you may want to pin the version.
e.g.
cargo install clean_git_history --version "1.0.4"
See https://doc.rust-lang.org/cargo/commands/cargo-install.html#install-options for more detailed documentation.
You can use the Docker image published to ghcr.io/developerc286/clean_git_history.
docker run --rm -v $(pwd):/workspace -w /workspace ghcr.io/developerc286/clean_git_history:latest origin/HEAD
Report issues or request features on our GitHub Issues.