GIT commit as different user without email / or only email

163,712

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:

  1. Only user name

    Omit the email address explicitly:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. 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"

Share:
163,712

Related videos on Youtube

Willem D'Haeseleer
Author by

Willem D'Haeseleer

DevOps Foodie

Updated on April 23, 2022

Comments

  • Willem D'Haeseleer
    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
      Samy Dindane almost 12 years
      A 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
      Willem D'Haeseleer almost 12 years
      I know that A U Thor forms Author, i was wondering if there was any significance in the separation.
    • Admin
      Admin about 10 years
  • Samy Dindane
    Samy Dindane almost 12 years
    There's no such thing as FirstName MiddleName LastName. See this.
  • Willem D'Haeseleer
    Willem D'Haeseleer almost 12 years
    Just 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
    Narek over 9 years
    Why doesn't it require password of John Doe if you commit for his name?
  • pmr
    pmr over 9 years
    @Narek What would that be in this context?
  • sanmai
    sanmai about 8 years
    If you'd use "name <>", and git commit --amend after, it will fail with invalid ident error; so just don't
  • qwertzguy
    qwertzguy over 7 years
    Apparently even when using that option, you still need to have set user.email and user.name in your git config, otherwise git complains.
  • TBirkulosis
    TBirkulosis almost 5 years
    This 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
    Andy over 4 years
    Unlike all of the other solutions, this works when you haven't initialized user.email/user.name initially.
  • Martin
    Martin almost 4 years
    This is the only one that worked for me. Note the order is important. git commit -c user.name="j bloggs" -am "message" gives an error fatal: Option -m cannot be combined with -c/-C/-F
  • MasterJoe
    MasterJoe almost 4 years
    How do I add a file as a different user for my first commit ? I will use the commit command after that.
  • zerzevul
    zerzevul over 3 years
    @Martin Yes, because the -c flag pertains to the git command proper and not the commit subcommand (which btw has a different -c flag)
  • user7860670
    user7860670 over 2 years
    This is the real answer. The rest suggesting --author are not helpful at all because user name and email are still required.