GIT以不同用户的身份提交而没有电子邮件/或仅电子邮件


127

我正在尝试以其他用户身份进行一些更改,但是我没有有效的电子邮件地址,以下命令对我不起作用:

git commit --author="john doe" -m "some fix"
fatal: No existing author found with 'john doe'

尝试仅使用电子邮件地址提交时,我遇到相同的问题

git commit --author="john@doe.com" -m "some fix"
fatal: No existing author found with 'john@doe.com'

在GIT手册页上的commit命令中,它说我可以使用

standard A U Thor <author@example.com> format

对于--author选项。

该格式在哪里定义?A和U代表什么?我该如何仅使用用户名或仅使用电子邮件来提交其他用户?


3
AU并不代表任何东西,它只是一个例子:AU Thor => AUThor => Author。您可以指定任何名称。
Samy Dindane

1
我知道AU Thor是作者,我想知道分居是否有任何意义。
Willem D'Haeseleer

Answers:


142

本SO答案所述,所需的最低作者格式为

Name <email>

就您而言,这意味着您要写

git commit --author="Name <email>" -m "whatever"

根据Willem D'Haeseleer的评论,如果您没有电子邮件地址,则可以使用<>

git commit --author="Name <>" -m "whatever"

正如您链接到的git commit手册页上所写的那样,如果您提供的内容少于此,它将用作搜索令牌,以搜索先前的提交,并查找该作者的其他提交。


28
刚刚发现,如果您没有电子邮件地址,也可以键入“ name <>”,以明确地将其保留为空白,而不用输入虚假的名称。
Willem D'Haeseleer

2
如果您使用"name <>"git commit --amend之后的版本,它将失败并显示invalid ident错误;所以请不要
sanmai

7
显然,即使使用该选项,您仍然需要在git配置中设置user.email和user.name,否则git会抱怨。
qwertzguy

51

具体格式为:

git commit --author="John Doe <john@doe.com>" -m "Impersonation is evil." 

1
如果您输入John Doe的名字,为什么它不要求输入密码?
纳雷克

3
@Narek在这种情况下会是什么?
pmr

37

标准 AU Thor <author@example.com>格式

似乎定义如下:(据我所知,绝对没有保修)

AU Thor = 必需的用户名

  • 字符的分隔可能表示允许使用空格,也可能类似于首字母。
  • 用户名后面必须有1个空格,多余的空格将被截断

<author@example.com> = 可选电子邮件地址

  • 必须始终在<>符号之间。
  • 电子邮件地址格式未经验证,您几乎可以输入所需的任何内容
  • 可选,您可以使用<>显式省略

如果您不使用这种确切的语法,则git将搜索现有的提交并使用包含您提供的字符串的第一个提交。

例子:

  1. 仅用户名

    明确省略电子邮件地址:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. 仅电子邮件

    从技术上讲这是不可能的。但是,您可以输入电子邮件地址作为用户名,并明确省略电子邮件地址。这似乎不是很有用。我认为从电子邮件地址中提取用户名,然后将其用作用户名会更有意义。但是,如果您必须:

    git commit --author="john@doe.com <>" -m "Impersonation is evil." 
    

当尝试将存储库从Mercural转换为git时,我遇到了这个问题。我在msysgit 1.7.10上测试了命令。


13

只需补充:

git commit --author =“ john@doe.com” -m“冒名顶替是邪恶的。”

在某些情况下,提交仍会失败,并显示以下消息:

***请告诉我你是谁。

git config --global user.email“ you@example.com” git config --global user.name“您的名字”

设置帐户的默认身份。省略--global仅在此存储库中设置标识。

致命:无法自动检测电子邮件地址(xxxx)

因此,只需运行“ git config”,然后运行“ git commit”


这就是我所需要的。对于公司GitHub和公共GitHub,我有单独的用户名和电子邮件。我需要将当前回购设置为使用我的公共GitHub用户名和电子邮件,以便我可以推送更改而不会暴露私人电子邮件。
TBirkulosis

8

格式

A U Thor <author@example.com>

只是意味着您应该指定

FirstName MiddleName LastName <email@example.com>

中间名和姓氏看起来是可选的(也许电子邮件之前的部分完全没有严格的格式)。尝试例如:

git commit --author="John <john@doe.com>" -m "some fix"

正如文档所说:

  --author=<author>
       Override the commit author. Specify an explicit author using the standard 
       A U Thor <author@example.com> format. Otherwise <author> is assumed to 
       be a pattern and is used to search for an existing commit by that author 
       (i.e. rev-list --all -i --author=<author>); the commit author is then copied 
       from the first such commit found.

如果您不使用此格式,则git会将提供的字符串视为一种模式,并尝试在其他提交的作者中查找匹配的名称。


没有FirstName MiddleName LastName这样的东西。看到这个
Samy Dindane

3

--author选项不起作用:

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

这样做:

git -c user.name='A U Thor' -c user.email=author@example.com commit

这是唯一为我工作的人。注意顺序很重要。git commit -c user.name="j bloggs" -am "message"给出了一个错误fatal: Option -m cannot be combined with -c/-C/-F
马丁

2

打开Git Bash。

设置一个Git用户名:

$ git config --global user.name“ name family”确认您已经正确设置了Git用户名:

$ git config --global user.name

姓氏家族

设置Git电子邮件:

$ git config --global user.email email@foo.com确认您已经正确设置了Git电子邮件:

$ git config --global user.email

email@foo.com


0

这完全取决于您的提交方式。

例如:

git commit -am "Some message"

将使用您的~\.gitconfig用户名。换句话说,如果您打开该文件,则应该看到一行如下所示:

[user]
    email = someemail@gmail.com

那就是您要更改的电子邮件。如果您通过Bitbucket或Github等发出请求请求,则无论您以谁身份登录。


0

一种替代方案,如果关注的是隐藏真实的电子邮件地址...如果你正致力于Github上,你并不需要一个真实的电子邮件,您可以使用<username>@users.noreply.github.com

无论是否使用Github,您都可能首先要更改提交者详细信息(在Windows上使用SET GIT_...

GIT_COMMITTER_NAME='username' 
GIT_COMMITTER_EMAIL='username@users.noreply.github.com'

然后设置作者

git commit --author="username <username@users.noreply.github.com>"

https://help.github.com/articles/keeping-your-email-address-private


与所有其他解决方案不同,此方法在您最初没有初始化user.email/user.name时起作用。
安迪

-2

从终端运行这两个命令来设置用户电子邮件和名称

 git config --global user.email "you@example.com" 

 git config --global user.name "your name" 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.