23 lines
648 B
Bash
Executable file
23 lines
648 B
Bash
Executable file
#!/usr/bin/env bash
|
|
# squash-history.sh — Replaces entire git history with a single "init" commit.
|
|
# WARNING: Destructive and irreversible. Force-pushes to remote.
|
|
|
|
set -euo pipefail
|
|
|
|
COMMIT_MSG="${1:-init}"
|
|
REMOTE="${2:-origin}"
|
|
BRANCH="main"
|
|
TEMP="temp-squash-$$"
|
|
|
|
echo "⚠️ This will destroy all git history and force-push to $REMOTE/$BRANCH."
|
|
read -r -p "Continue? [y/N] " confirm
|
|
[[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 0; }
|
|
|
|
git checkout --orphan "$TEMP"
|
|
git add -A
|
|
git commit -m "$COMMIT_MSG"
|
|
git branch -D "$BRANCH"
|
|
git branch -m "$TEMP" "$BRANCH"
|
|
git push --force "$REMOTE" "$BRANCH"
|
|
|
|
echo "Done. $(git log --oneline)"
|