所以我一直在从我的笔记本电脑上推送更改到我的公共存储库(通过登录我的github帐户)。我的笔记本电脑的推送有一个作为John Corser的作者,我使用github编辑器(自述文件)完成的提交显示为由johnpc(我的github帐户)编写。检查分析,johnpc只在存储库的历史记录中提交了两次,但实际上我是最重要的贡献者。
如何在github中修复此问题?
答案 0 :(得分:3)
由于用户名配置错误,很可能会发生这种情况。
在项目的根文件夹中打开~/.gitconfig
和.git/config
,&检查用户名字段是否存在于其中任何一个中并且设置正确。
要更正旧的提交,请使用以下内容(它将重写所有以johnpc作为用户的提交的提交信息)
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "johnpc" ];
then
GIT_COMMITTER_NAME="John Corser";
GIT_AUTHOR_NAME="John Corser";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
<强> 修改 强>
通过github上的存储库后,很明显您使用了2台独立的计算机来提交代码,其中一台使用凭据[johnpc, johnpc@email.domain]
,另一台使用凭据[John Corser, john@email.domain]
。要消除差异,请在两台计算机中转到项目目录并运行以下命令
$ git config user.name "johnpc"
$ git config user.email johnpc@email.domain
这标准化您的项目使用相同的用户名,来自两个位置的电子邮件,因此您以后的所有提交都是安全的。
接下来,要更正现有的回购历史记录,请执行
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "John Corser" ];
then
GIT_COMMITTER_NAME="johnpc";
GIT_AUTHOR_NAME="johnpc";
GIT_COMMITTER_EMAIL="johnpc@email.domain";
GIT_AUTHOR_EMAIL="johnpc@email.domain";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
请勿忘记将上面的电子邮件ID更改为您的实际电子邮件ID(我已对其进行了清理以防止其公开发布)
最后,强制将您的更改推送到您的github帐户
git push -f origin master
由于您有一些其他人参与此存储库,请让他们各自在他们的系统上执行git fetch
,然后执行git checkout master && git rebase origin/master
。在这个阶段不要做git pull
或git fetch && git merge
。
现在,所有人都应该拥有具有适当提交历史记录的更新代码。
PS:为了更加安全,您可以在本地创建github repo的备份克隆。
答案 1 :(得分:2)
Github通过电子邮件地址链接作者和提交者,而不是通过名称。使用git log
查看作者和提交者电子邮件地址对相关提交的影响。如果您使用有效的电子邮件地址进行提交,那么只需使用您的github帐户验证该电子邮件地址,然后他们将链接到您的github配置文件(大约一天左右)。如果您使用无效的电子邮件地址进行提交(git&#39; s默认值通常类似于username @ localhostname)。然后你必须重写所有的提交来解决这个问题。 (您最终会使用新信息进行新提交,并将所有分支指针移动到不引用任何&#34; bad&#34;提交)。