Updating Author Information in Old GitHub Commits Without Modifying Commit History
Sangam Man Buddhacharya
M.S. in CS & AI @ OSU | Machine Learning Engineer & Data Scientist | Tensorflow, PyTorch, Databricks | Helped 8+ companies solve their business problem using data
I collaborated on a Data Science project for three months and recently discovered that I had been using the wrong user name in the server Git configuration. As a result, all my GitHub commits were missing my GitHub username as a collaborator. Initially, I tried using the git commit --amend command to fix the author name, and it worked—except it also updated the commit dates to the time of the push, which wasn’t ideal. Additionally, using an interactive rebase to change the history for each commit can be a tedious process, especially if you have a large number of commits. Fortunately, I stumbled upon a quick and effective solution using a package called `git-filter-repo`. This tool saved the day by allowing me to change the author's name without altering the commit history.
Here’s a step-by-step guide on how to change your author name without affecting the commit dates:
Note: Before you start, make sure to work on a fresh clone of your repository and create a backup copy for safety.
pip install git-filter-repo
2. In this process, it rewrites the entire commit history, which can sometimes remove the remote URL, so it's important to save the URL in a text file beforehand.
git remote -v > remotes.txt
3. The following commands search for the author with the old name in all the commits, and if a match is found, they change the author’s name and email.
领英推荐
`git filter-repo --commit-callback '
if commit.author_name == b"<OLD_NAME>":
commit.author_name = b"<NEW_NAME>"
commit.author_email = b"<NEW_EMAIL>"
if commit.committer_email == b"<OLD_EMAIL>":
commit.committer_name = b"<NEW_NAME>"
commit.committer_email = b"<NEW_EMAIL>"
' --force`
4. Set your remote URL using the saved `remotes.txt` file.
while read -r name url; do
git remote add "$name" "$url"
git remote set-url "$name" "$url"
done < remotes.txt
5. Force-push the updated code to your GitHub repository.
git push -u origin main --force
This process allowed me to change my author name and email both locally and in my GitHub repository, all without altering the commit history. I hope this article will save you lots of time.
Thank you