aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2021-05-30-changing-git-authors.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/blog/2021-05-30-changing-git-authors.org')
-rw-r--r--content/blog/2021-05-30-changing-git-authors.org72
1 files changed, 72 insertions, 0 deletions
diff --git a/content/blog/2021-05-30-changing-git-authors.org b/content/blog/2021-05-30-changing-git-authors.org
new file mode 100644
index 0000000..b06660d
--- /dev/null
+++ b/content/blog/2021-05-30-changing-git-authors.org
@@ -0,0 +1,72 @@
+#+title: Changing Git Authors
+#+date: 2021-05-30
+#+description: A guide to change Git author names and emails in old commits.
+#+filetags: :dev:
+
+* Changing Git Author/Email Based on Previously Committed Email
+Here's the dilemma: You've been committing changes to your git
+repository with an incorrect name or email (or multiple repositories),
+and now you want to fix it. Luckily, there's a semi-reliable way to fix
+that. While I have never experienced issues with this method, some
+people have warned that it can mess with historical hashes and integrity
+of commits, so use this method only if you're okay accepting that risk.
+
+Okay, let's create the bash script:
+
+#+begin_src sh
+nano change_git_authors.sh
+#+end_src
+
+The following information can be pasted directly into your bash script.
+The only changes you need to make are to the following variables:
+
+- =OLD_EMAIL=
+- =CORRECT_NAME=
+- =CORRECT_EMAIL=
+
+#+begin_src sh
+#!/bin/sh
+
+# List all sub-directories in the current directory
+for dir in */
+do
+ # Remove the trailing "/"
+ dir=${dir%*/}
+ # Enter sub-directory
+ cd $dir
+
+ git filter-branch --env-filter '
+
+ OLD_EMAIL="old@example.com"
+ CORRECT_NAME="your-new-name"
+ CORRECT_EMAIL="new@example.com"
+
+ 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
+
+ git push --force --tags origin 'refs/heads/*'
+
+ cd ..
+done
+#+end_src
+
+Finally, save the bash script and make it executable.
+
+#+begin_src sh
+chmod a+x change_git_authors.sh
+#+end_src
+
+Now you can run the script and should see the process begin.
+
+#+begin_src sh
+./change_git_authors.sh
+#+end_src