在推送到远程之前在本地分支上更改git用户

时间:2019-03-01 16:36:44

标签: git git-push

我处于以下情况:

我得到了一个开发机器,所有的回购都绑定到其他人的git凭证上。我创建了一个新的本地分支,在9或10个存储库中进行了大量提交。我现在在公司的git服务器上有一个帐户,我想将我的本地分支推送到远程服务器(相同的分支,不需要在那里进行任何更改)。

但是,我需要它来显示所有提交是由我而不是由在我之前使用此笔记本电脑的其他人所做的。

有没有办法做到这一点?我是否需要以某种方式返回并将与所有这些本地提交关联的用户更改为我自己,如果是这样,我该怎么做?如有必要,可对黑客开放。

1 个答案:

答案 0 :(得分:1)

检出GitHub的script,以“更改作者信息”:

  

要更改现有提交中记录的名称和/或电子邮件地址,   您必须重写Git存储库的整个历史记录。

     

警告:此操作对存储库的历史记录具有破坏性。如果   您正在与其他人在存储库上进行协作,这被认为是不好的   练习重写已发布的历史记录。您只应在   紧急。

     

使用脚本更改存储库的Git历史记录

     

我们已经   创建了一个脚本,该脚本将更改以前具有   作者或提交者字段中的旧电子邮件地址,以使用正确的   名称和电子邮件地址。

     

注意:运行此脚本将重写所有存储库的历史记录   合作者。完成这些步骤后,任何人用叉子或   克隆必须获取重写的历史记录并为所有本地更改重新设置基准   进入改写的历史记录。

     

在运行此脚本之前,您需要:

     
      
  • 出现在“作者/提交者”字段中的旧电子邮件地址   您要更改
  •   
  • 您要输入的正确名称和电子邮件地址   例如将此类提交归因于
  •   
     

说明:

     
      
  1. 打开终端。

  2.   
  3. 为存储库创建一个全新的裸克隆:

  4.   
git clone --bare https://github.com/user/repo.git`
cd repo.git
     
      
  1. 复制并粘贴脚本,并根据以下内容替换以下变量   您收集的信息:
  2.   
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

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
     
      
  1. Enter 运行脚本。

  2.   
  3. 查看新的Git历史记录以了解错误。

  4.   
  5. 将更正的历史记录推送到GitHub:

         

    git push --force-标记源'refs / heads / *'

  6.   
  7. 清理临时克隆:

  8.   
cd ..
rm -rf repo.git