2016-05-16 58 views

回答

64

UserA是实际进行更改的人。 UserB是将这些更改提交给此分支的人员。即如果UserA提交对branch1的更改,UserB将向branch2提交一些更改,并将branch1与branch2进行重定位。现在,branch1中的最高提交将显示UserA已经用UserB提交了这些更改。

编辑:这主要发生在rebasing和cherry-picking期间,因为作者和提交者在这些过程中可能会有所不同。

+2

还有'git commit --author = '覆盖了提交作者。像Jetbrains的PhpStorm这样的一些GUI允许从提交窗口中选择该选项;它通常会提供一个自动完成的下拉列表,在提交提交表单之前可能会被意外击中。 –

8

@ venkatKA的回答是准确和描述性的,但我想我会添加一些细节。

git cat-file -p HEAD可以用来打印出有关信息提交

tree d85ed3c3a055c95445898a5119ea0a532459fdsf 
parent 0b6ed951b2c04b4134c91ffa053b4330edfdffc1 
author AuthA <[email protected]> 1487356245 +0000 
committer AutbB <[email protected]> 1487356245 +0000 

如果你要修复的历史提交者(例如,如果你改变你的身份),那么你可以使用:

git filter-branch -f --tree-filter "GIT_COMMITTER_NAME='New Author'; GIT_COMMITTER_EMAIL='New Author'" 

关于打破历史的rebase的标准评论以及为什么修正主义是一个坏主意。

+4

你也可以'git show --format = full'或'git show --format = fuller'(或者在'git log'中使用相同的'--format'参数)来查看作者和提交者。 – torek

0

发生这种情况的另一个可能原因是使用了$GIT_AUTHOR_NAME$GIT_AUTHOR_EMAIL env变量。

当这些变量被设置时,无论配置值是在本地设置的,它们都会覆盖每次前进提交的作者部分,无论如何设置user.nameuser.email。在这种情况下,当您点击git cat-file -p HEAD时,作者显示值为$GIT_AUTHOR_NAME,提交者显示本地配置的值user.name

因此,您需要删除在.bashrc.zshrc中删除导出这些变量的行,或者如果要保留这些行但不希望发生这种情况,请在运行git commit之前插入unset GIT_AUTHOR_NAME && unset GIT_AUTHOR_EMAIL