Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写Git回购的第一次提交_Git_Rebase - Fatal编程技术网

重写Git回购的第一次提交

重写Git回购的第一次提交,git,rebase,Git,Rebase,我有一个旧的CVS repo,我已经转换成GIT,在这样做的过程中,我意识到我的一些用户名被弄乱了。。。我可以用.mailmap修复一些问题,我还使用了Atlassian Stash和某个插件,该插件允许我查看谁犯了什么等的漂亮图表。问题是,根据插件说明: 如何合并两个具有不同电子邮件且实际上是一个人的用户?从Stash2.5.0开始,您可以在 存储库来执行此操作。请注意,这只影响所做的提交 添加邮件映射文件后。在中更改全局.mailmap文件 Git没有帮助(请参见此处的详细信息) 这意味着,

我有一个旧的CVS repo,我已经转换成GIT,在这样做的过程中,我意识到我的一些用户名被弄乱了。。。我可以用
.mailmap
修复一些问题,我还使用了Atlassian Stash和某个插件,该插件允许我查看谁犯了什么等的漂亮图表。问题是,根据插件说明:

  • 如何合并两个具有不同电子邮件且实际上是一个人的用户?从Stash2.5.0开始,您可以在 存储库来执行此操作。请注意,这只影响所做的提交 添加邮件映射文件后。在中更改全局.mailmap文件 Git没有帮助(请参见此处的详细信息)
  • 这意味着,如果我添加
    .mailmap
    文件,它实际上不会对我3年的历史提交产生任何影响

    我相信我要做的是重写提交历史,修改第一次提交,并将
    .mailmap
    文件添加到repo中,然后使用强制推送来覆盖存储在我的服务器上的内容

    • 这是正确的方法吗
    • 为了添加
      .mailmap
      文件,然后替换远程repo,我必须运行哪些Git命令

    如果你正在重写你的所有历史记录,你只需更改名称/电子邮件,而不是使用.mailmap

    如果您想添加邮件映射,您还可以使用过滤器分支,但形式不同。这就像你不使用邮件地图就想重写邮件一样

          git filter-branch --env-filter '
    
          DUP_EMAIL="email_that_you_want_to_change"
          CORRECT_EMAIL="email_you_would_rather_have"
    
          if [ "$GIT_COMMITTER_EMAIL" = "$DUP_EMAIL" ]
          then
                export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
          fi
          if [ "$GIT_AUTHOR_EMAIL" = "$DUP_EMAIL" ]
          then
                export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
          fi
          ' --tag-name-filter cat -- --branches --tags