重写Git Repo的第一次提交

时间:2014-10-03 01:01:12

标签: git rebase

我有一个旧的CVS回购我已经转换为GIT,并且这样做我意识到我的一些用户名混乱...我可以使用.mailmap修复的东西我也在使用 Atlassian Stash 以及一个允许我查看谁提交了什么内容的漂亮图表的插件。问题在于插件说明符号:

  
      
  1. 如何将两个用户合并为不同的电子邮件实际上是一个人?从Stash 2.5.0开始,您可以使用.mailmap文件   存储库来做到这一点。请注意,这仅影响提交   添加mailmap文件后。更改全局.mailmap文件   Git不会帮忙(详见此处)。
  2.   

所以这意味着如果我添加我的.mailmap文件,它对我3年的历史提交不会产生任何影响。

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

  • 这是正确的方法吗?
  • 我必须运行哪些Git命令才能添加.mailmap文件然后替换我的远程仓库

1 个答案:

答案 0 :(得分:0)

Git Filter Branch

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

如果要添加mailmap,您还可以使用filter-branch,但使用不同的形式。这就像你想要在不使用邮件地图的情况下重写电子邮件

      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