Skip to content

Instantly share code, notes, and snippets.

@makesomelayouts
Last active January 12, 2026 12:25
Show Gist options
  • Select an option

  • Save makesomelayouts/cf3c7359c75e9493afd7f8870d41bb4e to your computer and use it in GitHub Desktop.

Select an option

Save makesomelayouts/cf3c7359c75e9493afd7f8870d41bb4e to your computer and use it in GitHub Desktop.
a good solution to change commits author.

Source Video Source Code

  1. clone your repository with bare tag
git clone --bare https://github.com/yournickname/reponame.git
  1. go to your repository
cd reponame.git
  1. download script that i put here -> 'replace-git-commit-author.sh'

  2. move into your repository.git

  3. edit script to your: email that you wanna change, email and name that will be to changed instead.

OLD_EMAIL=""
CORRECT_NAME=""
CORRECT_EMAIL=""
  1. run script (to run bash scripts you need: git bash or WSL)
./replace-git-commit-author.sh
  1. push only tags i guess
git push --force --tags origin 'refs/heads/*'

!! and if u have multiple old emails to check, then u can use script: replace-all-manually.sh to write them down, if don't work try then replace-all-manually-2.sh, for me its working so yeah should be alright.

to check who is author in commits = git log --oneline --format="%h %an <%ae>" -10

the easiest way - just use replace-all.sh to change all commits to your needed author, always work, but if you work with someone you will change their author to yours.... i guess, so becareful to what shell script to use

#!/bin/bash
# change forward without difficulties
git filter-branch -f --env-filter '
if [ "$GIT_AUTHOR_NAME" = "NICKNAME_THAT_I_WANT_TO_CHANGE" ]; then
export GIT_AUTHOR_NAME="makesomelayouts"
export GIT_AUTHOR_EMAIL="makesomelayouts@gmail.com"
fi
if [ "$GIT_COMMITTER_NAME" = "NICKNAME_THAT_I_WANT_TO_CHANGE" ]; then
export GIT_COMMITTER_NAME="makesomelayouts"
export GIT_COMMITTER_EMAIL="makesomelayouts@gmail.com"
fi
' --tag-name-filter cat -- --all
#!/bin/bash
CORRECT_NAME="makesomelayouts"
CORRECT_EMAIL="makesomelayouts@gmail.com"
# Check all possible old names and emails
OLD_NAMES="Name name named nameName NAME NAMED"
OLD_EMAILS="oldMail@gmail.com someOldMails@gmail.com olddest@gmail.com gmails@gmail.com admin@gmail.com"
git filter-branch -f --env-filter '
# func to check email
match_old_email() {
email="$1"
case " $OLD_EMAILS " in
*" $email "*)
return 0
;;
*)
return 1
;;
esac
}
# func to check name
match_old_name() {
name="$1"
case " $OLD_NAMES " in
*" $name "*)
return 0
;;
*)
return 1
;;
esac
}
# check n changin COMMITTER
if match_old_email "$GIT_COMMITTER_EMAIL" || match_old_name "$GIT_COMMITTER_NAME"; then
export GIT_COMMITTER_NAME="'"$CORRECT_NAME"'"
export GIT_COMMITTER_EMAIL="'"$CORRECT_EMAIL"'"
fi
# check n changin AUTHOR
if match_old_email "$GIT_AUTHOR_EMAIL" || match_old_name "$GIT_AUTHOR_NAME"; then
export GIT_AUTHOR_NAME="'"$CORRECT_NAME"'"
export GIT_AUTHOR_EMAIL="'"$CORRECT_EMAIL"'"
fi
' --tag-name-filter cat -- --branches --tags
#!/bin/bash
# just changing all commits without checking
git filter-branch -f --env-filter '
export GIT_AUTHOR_NAME="makesomelayouts"
export GIT_AUTHOR_EMAIL="makesomelayouts@gmail.com"
export GIT_COMMITTER_NAME="makesomelayouts"
export GIT_COMMITTER_EMAIL="makesomelayouts@gmail.com"
' --tag-name-filter cat -- --branches --tags
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL=""
CORRECT_NAME=""
CORRECT_EMAIL=""
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment