我遇到以下情况:
我得到了一台开发机器,所有的回购都绑定了别人的git凭据。我创建了一个新的本地分支,在9或10个repos中做了一堆提交。我现在在公司的git服务器上有一个帐户,我想将我的本地分支推送到远程服务器(同一个分支,不需要在那里更改任何内容)。
但是,我需要它来显示我所做的所有提交,而不是在我之前使用这台笔记本电脑的其他人。
有没有办法做到这一点?我是否需要以某种方式返回并将与所有这些本地提交相关联的用户更改为自己,如果是,我该怎么做?必要时打开黑客。
结帐GitHub的script“更改作者信息”:
要更改现有提交中记录的名称和/或电子邮件地址,您必须重写Git存储库的整个历史记录。
警告:此操作对存储库的历史记录具有破坏性。如果您正在与其他人协作存储库,则重写已发布的历史记录被认为是不好的做法。你应该只在紧急情况下这样做。
使用脚本更改存储库的Git历史记录
我们创建了一个脚本,该脚本将更改以前在其作者或提交者字段中具有旧电子邮件地址的任何提交,以使用正确的名称和电子邮件地址。
注意:运行此脚本会重写所有存储库协作者的历史记录。完成这些步骤后,任何拥有叉子或克隆的人都必须获取重写的历史记录,并将任何本地更改重新绑定到重写的历史记录中。
在运行此脚本之前,您需要:
- 您要更改的作者/提交者字段中显示的旧电子邮件地址
- 您希望将此类提交归因于的正确名称和电子邮件地址
说明:
- 开放式终端。
- 为您的存储库创建一个全新的裸克隆:
git clone --bare https://github.com/user/repo.git` cd repo.git
- 复制并粘贴脚本,根据您收集的信息替换以下变量:
OLD_EMAIL CORRECT_NAME CORRECT_EMAIL #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="[email protected]" CORRECT_NAME="Your Correct Name" CORRECT_EMAIL="[email protected]" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags
- 按Enter键运行脚本。
- 查看新的Git历史记录以查找错误。
- 将更正的历史记录推送到GitHub: git push --force --tags origin'refs / heads / *'
- 清理临时克隆:
cd .. rm -rf repo.git