aboutsummaryrefslogtreecommitdiff
path: root/blog/changing-git-authors/index.org
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2024-03-04 22:34:28 -0600
committerChristian Cleberg <hello@cleberg.net>2024-03-04 22:34:28 -0600
commit797a1404213173791a5f4126a77ad383ceb00064 (patch)
treefcbb56dc023c1e490df70478e696041c566e58b4 /blog/changing-git-authors/index.org
parent3db79e7bb6a34ee94935c22d7f0e18cf227c7813 (diff)
downloadcleberg.net-797a1404213173791a5f4126a77ad383ceb00064.tar.gz
cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.tar.bz2
cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.zip
initial migration to test org-mode
Diffstat (limited to 'blog/changing-git-authors/index.org')
-rw-r--r--blog/changing-git-authors/index.org72
1 files changed, 72 insertions, 0 deletions
diff --git a/blog/changing-git-authors/index.org b/blog/changing-git-authors/index.org
new file mode 100644
index 0000000..b06660d
--- /dev/null
+++ b/blog/changing-git-authors/index.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