GIT commit as different user without email / or only email
Solution 1
The
standard A U Thor <[email protected]> format
Seems to be defined as followed: ( as far as i know, with absolutely no warranty )
A U Thor = required username
- The separation of the characters probably indicates that spaces are allowed, it could also be resembling initials.
- The username has to be followed by 1 space, extra spaces will be truncated
<[email protected]> = optional email address
- Must always be between < > signs.
- The email address format isn't validated, you can pretty much enter whatever you want
- Optional, you can omit this explicitly by using <>
If you don't use this exact syntax, git will search through the existing commits and use the first commit that contains your provided string.
Examples:
-
Only user name
Omit the email address explicitly:
git commit --author="John Doe <>" -m "Impersonation is evil."
-
Only email
Technically this isn't possible. You can however enter the email address as the username and explicitly omit the email address. This doesn't seem like it's very useful. I think it would make even more sense to extract the user name from the email address and then use that as the username. But if you have to:
git commit --author="[email protected] <>" -m "Impersonation is evil."
I ran in to this when trying to convert a repository from mercurial to git. I tested the commands on msysgit 1.7.10.
Solution 2
The minimal required author format, as hinted to in this SO answer, is
Name <email>
In your case, this means you want to write
git commit --author="Name <email>" -m "whatever"
Per Willem D'Haeseleer's comment, if you don't have an email address, you can use <>
:
git commit --author="Name <>" -m "whatever"
As written on the git commit
man page that you linked to, if you supply anything less than that, it's used as a search token to search through previous commits, looking for other commits by that author.
Solution 3
The specific format is:
git commit --author="John Doe <[email protected]>" -m "Impersonation is evil."
Solution 4
The --author
option doesn't do the right thing for the purpose of not leaking information between your git personalities: It doesn't bypass reading the invoking user's configuration:
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
This does:
git -c user.name='A U Thor' -c [email protected] commit
For the purpose of separating work- and private git personalities, Git 2.13 supports directory specific configuration: You no longer need to wrap git and hack this yourself to get that.
Solution 5
Just supplement:
git commit --author="[email protected] " -m "Impersonation is evil."
In some cases the commit still fails and shows you the following message:
*** Please tell me who you are.
Run
git config --global user.email "[email protected]" git config --global user.name "Your Name"
to set your account's default identity. Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got xxxx)
So just run "git config", then "git commit"
Related videos on Youtube
Comments
-
Willem D'Haeseleer about 2 years
I'm trying to commit some changes as a different user, but i do not have a valid email address, following command is not working for me:
git commit --author="john doe" -m "some fix" fatal: No existing author found with 'john doe'
I have the same problem when trying to commit with only an email address
git commit --author="[email protected]" -m "some fix" fatal: No existing author found with '[email protected]'
On the GIT man pages for the commit command it says i can use the
standard A U Thor <[email protected]> format
For the --author option.
Where is this format defined ? what does A and U stand for ? how do i commit for a different user with only a username or only an email?
-
Samy Dindane almost 12 yearsA U doesn't stand for anything, it's just an example: A U Thor => AUThor => Author. You can specify anything you want as a name.
-
Willem D'Haeseleer almost 12 yearsI know that A U Thor forms Author, i was wondering if there was any significance in the separation.
-
Admin about 10 years
-
-
Samy Dindane almost 12 yearsThere's no such thing as FirstName MiddleName LastName. See this.
-
Willem D'Haeseleer almost 12 yearsJust found out that if you don't have an email address you can also just type "name <>" , to explicitly leave it blank instead of entering bogus.
-
Narek over 9 yearsWhy doesn't it require password of John Doe if you commit for his name?
-
pmr over 9 years@Narek What would that be in this context?
-
sanmai about 8 yearsIf you'd use
"name <>"
, andgit commit --amend
after, it will fail withinvalid ident
error; so just don't -
qwertzguy over 7 yearsApparently even when using that option, you still need to have set user.email and user.name in your git config, otherwise git complains.
-
TBirkulosis almost 5 yearsThis is what I needed. I have separate username and email for a corporate GitHub and the public GitHub. I needed to set my current repo to use my public GitHub username and email so that I could push my changes without exposing a private email.
-
Andy over 4 yearsUnlike all of the other solutions, this works when you haven't initialized user.email/user.name initially.
-
Martin almost 4 yearsThis is the only one that worked for me. Note the order is important.
git commit -c user.name="j bloggs" -am "message"
gives an errorfatal: Option -m cannot be combined with -c/-C/-F
-
MasterJoe almost 4 yearsHow do I add a file as a different user for my first commit ? I will use the commit command after that.
-
zerzevul over 3 years@Martin Yes, because the
-c
flag pertains to thegit
command proper and not thecommit
subcommand (which btw has a different-c
flag) -
user7860670 over 2 yearsThis is the real answer. The rest suggesting --author are not helpful at all because user name and email are still required.