Compare commits

...

3 commits

Author SHA1 Message Date
Benedikt Heine
808243babc Add git-rewrite-commits
Some checks failed
Build / Lint Code Base (push) Has been cancelled
CI / build (push) Has been cancelled
2025-07-31 23:52:21 +02:00
Felix Buehler
ad24ebe4a2 Enforce git commands being run inside git folder 2025-07-31 23:48:39 +02:00
Benedikt Heine
72ceb16f5f Add git automatic range diff
Co-authored-by: Felix Buehler <account@buehler.rocks>
2025-07-31 23:47:37 +02:00
4 changed files with 60 additions and 2 deletions

23
bin/git-ard.sh Executable file
View file

@ -0,0 +1,23 @@
#!/usr/bin/env bash
# Git automatic range diff
# Enforce being in a git repository
git rev-parse --is-inside-work-tree >/dev/null || exit $?
# We actually should check out the head branch via `git remote show ${REMOTE}`,
# but this requires active connection and active 2FA verification. Tedious to
# have multiple calls for this
if git rev-parse --verify main &>/dev/null; then
MAIN_BRANCH=main
else
MAIN_BRANCH=master
fi
CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
GIT_REMOTE=origin
# Show the next command
set -x
git range-diff "${GIT_REMOTE}/${MAIN_BRANCH}..${GIT_REMOTE}/${CURRENT_BRANCH}" "${MAIN_BRANCH}..${CURRENT_BRANCH}"

View file

@ -1,5 +1,8 @@
#!/bin/sh
# Enforce being in a git repository
git rev-parse --is-inside-work-tree >/dev/null || exit $?
# save as i.e.: git-authors and set the executable flag
git ls-tree -r -z --name-only HEAD -- "${1}" \
| xargs -0 -n1 git blame --line-porcelain HEAD \
@ -7,4 +10,3 @@ git ls-tree -r -z --name-only HEAD -- "${1}" \
| sort \
| uniq -c \
| sort -nr

32
bin/git-rewrite-commits.sh Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/env bash
# Automatically start a rebase for all commits between HEAD and the main
# branch without integrating new commits from the main branch
#
# Technically it's a git rebase without rebasing any commits.
# Enforce being in a git repository
git rev-parse --is-inside-work-tree >/dev/null || exit $?
# We actually should check out the head branch via `git remote show ${REMOTE}`,
# but this requires active connection and active 2FA verification. Tedious to
# have multiple calls for this
if git rev-parse --verify main &>/dev/null; then
MAIN_BRANCH=main
else
MAIN_BRANCH=master
fi
CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
if [ "${CURRENT_BRANCH}" = "${MAIN_BRANCH}" ]; then
echo "Cannot rebase commits from '${CURRENT_BRANCH}' (HEAD) onto '${MAIN_BRANCH}'" >&2
exit 1
fi
MERGE_BASE="$(git merge-base "${MAIN_BRANCH}" HEAD)"
# Show the next command
set -x
git rebase --interactive "${MERGE_BASE}"

View file

@ -76,6 +76,8 @@
- link:
~/.local/bin/host-is-on: bin/host-is-on.sh
~/.local/bin/git-authors: bin/git-authors.sh
~/.local/bin/git-ard: bin/git-ard.sh
~/.local/bin/git-rewrite-commits: bin/git-rewrite-commits.sh
~/.local/bin/clean: bin/clean.sh
# systemd
@ -88,4 +90,3 @@
- link:
~/.local/bin/diff-so-fancy: git/diff-so-fancy/diff-so-fancy