我有一个名为a
的本地仓库,它已经与一个名为 GitHub 帐户A-github
的A
的远程仓库相关联, 我还有一个名为b
的本地存储库,该存储库尚未与任何远程存储库关联。
我创建了一个名为 GitHub 帐户B-github
B
的新远程仓库,并尝试从本地仓库b
进行第一次推送以B
。
发生了什么事
- 推送成功,我看到
B
页面反映了b
的提交。 - 但是,
B
页面上显示的进行第一次推送的用户的名称不是b
的名称,而是另一个GitHub帐户A-github
的名称。(图标图像也与页面中设置A-github
相同) - 当我点击第一个推送的用户的名称(
A-github
)时,我转到了A-github
帐户的页面。 - 奇怪的是,这种情况并没有记录在
A-github
的"概述"页面上的Contribution activity
上。
我的猜测
我猜这是本地存储库b
git config
的问题。我尝试了git config -l
,发现user.name
和user.email
是这样的加倍:
...
...
user.name = the user name I use for repository `a` and `A`
user.email = the user email I use for repository `a` and `A`
...
...
user.name = the user name I use for repository `b` and `B`
user.email = the user email I use for repository `b` and `B`
...
...
...
我想让 git 使用正确的用户 (b
) 来推送到B
如果可以的话,我想取消A-github
完成的推送
我该怎么办?
进展
我已经通过包管理器安装了git filter-repo
并尝试了此处显示的方法,
将git filter-repo --mailmap my-mailmap
与格式化为
Correct Name <correct@email.com> <old@email.com>
然后,我按了回车键。 但是,结果是刚刚返回的外壳
Python
似乎什么也没发生。 我想我需要更多的试验。
我做的对吗?
我有点害怕我正确使用git filter-repo
。
我的理解是,我首先需要创建一个文本文件
,命名如下:Correct Name <correct@email.com> <old@email.com>
其中Correct Name
和<correct@email.com>
是我想用来替换当前作者和提交者的姓名和电子邮件,<old@email.com>
是写在日志中的当前电子邮件。
我正在输入电子邮件,两端都放<>
。
可以吗?
进展 2
我发现我似乎需要提前在我的PC上安装Python才能使用git-filter-repo
命令,所以我不久前通过Scoop安装了Python。 我再次尝试实现上面的命令,这次 shell 返回:
Cannot read my-mailmap
另一个困难来了。
现在讨论已经偏离了这个话题,我发布了一个新问题,我将关闭这个问题。谢谢你的建议。
首先,在存储库中执行git config -l --show-scope --show-origin
:这样,您一定会看到什么是本地配置,它覆盖了全局配置。
其次,您可以使用git filter-repo
来更改 repoB 中提交的 user.name/email:然后需要git push --force
它(如果您独自处理新存储库,这不是一个大问题)。