Suppose you do not want to have the same configuration for your local repository as you have your global Git settings. Or you need to fix identity information for commits that are already made in Git commit history. In that case, this article will show you a few Git commands on how to set up the custom configuration for your local Git repository or how to fix past mistakes.
- Change Future Commits Author
- Git Config Check
- Git Global Configuration
- Git Local Configuration
- Author Identity For the Next Commit
- Change Past Commits Author
There are two different needs in the request of changing author for your commits. Let’s make clear what are you really looking for:
- a) Either you want to change the author before making commit.
- b) Or you want to change the author after you have made commit.
In this article, we will look at both ways how to change the commit’s author identity.
Change Future Commits Author
There are three different ways how to change identity for your Git committer. All the procedures only affect future commits and not the past commits made in the development line of your repository (commit history).
Git Config Check
Just a quick tip. To confirm your settings for global and local configuration you can type command:
git config --list
git config --list will show global system git settings. If you run it inside a repository, it will also attach and show you the local configuration.
However, using following command might be more clearer:
git config --list --show-origin
git config --list --show-origin command does all what
git config --list does. Git command also attaches a path to the origin file of each config item in the list. Arguably, the attached path makes the settings look more understandable, and you can better connect items and their values for local and global Git settings.
Git Global Configuration
If you want to change your username and email by default for all project on your machine, edit global configuration settings. You can run the
git config command with
--global flag that will override your default Git settings and apply for all the future commits in your repositories. Git command for it looks like this:
git config --global user.name "FIRST_NAME LAST_NAME" git config --global user.email "EMAIL@example.com"
Git Local Configuration
However, if you want to change your username and email only for single project, go to your repository and make git config adjustment like this:
git config --local user.name "FIRST_NAME LAST_NAME" git config --local user.email "EMAIL@example.com"
Simply omit the
--global flag and replace it with
git config --local makes the custom configuration valid only in the repository you made a change.
Author Identity For the Next Commit
There is at least one last way how to temporary influence the author identity of the commit. Just right before making the commit, add to
--author flag. When making the commit, you can override even local settings.
git commit --author="FIRST_NAME LAST_NAME
Change Past Commits Author
Changing past commit authors in Git repositories is not so straightforward as it is for future ones. The issue lies in the fundamental idea of Git – its distributed asynchronous nature. You should be aware of one simple fact that you might cause a massive problem with synchronization if you work on the project with many team members.
When you change Git commit author identity, you create an entirely new commit with a new hash; you are rewriting commit history and development branch. And while for a single individual repository user, this might not be a problem, for big teams, this might be a cause of enormous evil.
Therefore, let me give you a piece of good advice: if you are working in a team, a change in Git commit history should be adequately communicated with the rest of the team. It might happen that other team members already based their work on the existing commits, and additional changes would cause huge synchronization problems. Communicate with your team if you feel that commits might be already used as the base for other people work. Eventually, for good or bad, it might be possible even to avoid changing commit author identity, and either do rollback commit with new commit with correct author commit or, better, leave the commit history as it is. Commit change is much more critical in the long term as a person who made it (empirical experience – people come and go from teams, code stays forever).
Git Ammend With Author Flag
git ammend command is used to patch last commit in Git’s commit history. By attaching
--author flag to
git ammend command you can effectively rewrite commit author identity for the last commit in commit history.
Git Interactive Rebase
Interactive rebase is a powerful feature of Git that allows you to edit Git commit history very effectively.
However, be careful with interactive rebase, it might shoot you in the foot if you will be not careful! Any changes made will affect your Git commit history. I would recommend to study deeper official Git documentation for interactive rebase before making any changes with it over console [7.6 Git Tools – Rewriting History]. Otherwise I can really recommend using interactive rebase with IDE tools such as IntelliJ.
First step, you need to find commit you consider as base for your interactive rebase. Provide to git command commit’s hash like this:
$ git rebase -i -p 9be2477a
git rebase command will open the interactive editor in which you need to mark all the commits you want to change. Selected commits will be marked with the red keyword “edit”.
edit 87bee32a Added new tests edit 1be09dcb Merge branch with hotfix for DJ-1041 edit 9be2477a Change title tag for homepage edit c427697c Add images support in gallery
Git will now walk you through each commit. You will have a chance to change every commit individually:
Stopped at 1be09dcb... Merge branch with hotfix for DJ-1041 You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue
Now is your chance to rewrite the commit author identity. Either you will use
--author flag. Or you will continue to next commit in edit mode until you have edited all commits which were marked for edit
$ git commit --amend --author="FIRST_NAME LAST_NAME
" --no-edit $ git rebase --continue
Last option is to use Git
filter-branch will allow you to go through a large chunk of commits with the help of simple script. Let us show you a simple script:
$ git filter-branch --env-filter ' OLD_COMMITTER_EMAIL="OLD_EMAIL@example.com" NEW_COMMITTER_NAME="FIRST_NAME LAST_NAME" NEW_COMMITTER_EMAIL="NEW_EMAIL@example.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_COMMITTER_EMAIL" ] then export GIT_COMMITTER_NAME="$NEW_COMMITTER_NAME" export GIT_COMMITTER_EMAIL="$NEW_COMMITTER_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_COMMITTER_EMAIL" ] then export GIT_AUTHOR_NAME="$NEW_COMMITTER_NAME" export GIT_AUTHOR_EMAIL="$NEW_COMMITTER_EMAIL" fi ' --tag-name-filter cat -- --branches --tags
However, same as with interactive rebase, it is necessary to be aware that by using
filter-branch, you will create entirely new sort of commits and change Git commit history. The new commit history might have severe consequences when synchronizing with your team, so you should do this preferably only on repositories that haven’t been published or shared.
In summary, we divided the methods of changing the commit author identity into two different approaches based on the commit stage. We showed three different ways to change the author information before making a commit, and we explained another three ways to change the author information after making a commit.
Did you find commands easy? Do you have your trick or know another way how to change global and local Git settings? Let us know in the comments below the article. We would like to hear your ideas and stories.