✅ Rewritten in TypeScript.
✅ Added quiet mode.
✅ super fast (uses git-filter-repo instead of git filter branch).
✅ simple and intuitive api.
✅ standalone - no 3rd party requirements (git-filter-repo included).
Caution
THIS WILL REWRITE YOUR GIT HISTORY!
THIS OPERATION CANNOT BE REVERTED!
USE AT YOUR OWN RISK!
npm install -g @tool3/restoryor
npx @tool3/restory <cmd> [args] [options]things to know:
restoryuses it's own dist ofgit-filter-repo
and therefore doesn't rely on you having it.- by default it does NOT remove
originwhen done rewriting. (unless run with--safe). - every
restorycommand recreates the commit|s shas. - you need to have a clean working directory.
- you will have to force push if using the same
origin. - when run without commit filter flag (
-s||-n||-r- see options) - the command will rewrite ALL commits with given input.
every command in restory can either set a new value or replace an existing value.restory <cmd> [optional-subject-to-replace] <value>
see more details for each command below
| Command | Alias | Description |
|---|---|---|
list | ls | list all commits |
redate | rd | rewrite commit(s) date |
reauthor | ra | rewrite commit(s) author name |
remail | re | rewrite commit(s) author email |
remsg | rm | rewrite commit(s) message |
rewrite | rw | rewrite multiple commit fields. This command is a combination of all of the commands above, and is controlled with flags |
| Option | Alias | Description | Default |
|---|---|---|---|
sha | s | rewrite a specific commit sha. | |
quiet | q | don't log every commit change. | false |
safe | S | remove origin when done rewriting. | false |
range | r | range of commits to operate on. | |
ellipsis | e | truncate output to minimum width. | true |
logo | l | print logo. | true |
number | n | number of commits. | 0 (all commits) |
committer | c | include committer fields. For example: author_date will also include committer_date in the rewrite. | true |
git-filter-repo | g | use git filter-repo instead of git filter-branch. This method is extremely fast compared to filter-branch. | true |
list all commits
restory lslist last 5 commits
restory ls -n 5list range of commits
restory ls -r 'c884ca6''0b4be21'rewrite all commits that has 2021 to year to 1984
restory redate 2021 1984rewrites a specific commit's day
restory redate 'Jan 23''Jan 24' -s '0b4be21'rewrites the last 5 commits date to now
restory redate "$(echo `date`)" -n 5rewrite all commit author names to The Devil
Caution
IMPERSONATION IS STRICTLY PROHIBITED!
ANY IMPERSONATION WILL BE YOUR RESPONSIBILITY!
restory reauthor 'The Devil'rewrite last 5 commits author to Jebediah Kerman
restory reauthor 'Jebediah Kerman' -n 5rewrite all commit author and committer email to thedevil@666.com
Caution
IMPERSONATION IS STRICTLY PROHIBITED!
ANY IMPERSONATION WILL BE YOUR RESPONSIBILITY!
restory remail 'thedevil@666.com'rewrite specific commit message
restory remsg 'this is the new commit msg' -s '620a83b'rewrite Moon to Mun in all commit messages
restory remsg 'Moon''Mun'rewrite commit message and replace date year 1987 to 1988 for the last 3 commits
restory rewrite -m 'this is the new commit msg' -d '1987''1988' -n 3rewrite Moon to Mun in all commit messages
restory rewrite -m 'Moon''Mun'rewrite commit message, replace t to z in author name and set email to new_value@world.com in a range of commits
restory rewrite -m 'new message' -a 't''z' -e 'new_value@world.com' -r '8381e6a''4110655'
