2012-09-03 53 views
2

我從 「第一個最後<[email protected]>」,以改變我的Git作者的作者姓名後「第一個最後<[email protected]>」覆蓋所有Git作者的更改賬戶

兩個電子郵件地址與不同的Github賬戶相關聯,我將我所有的個人項目遷移到第二個賬戶。

我的問題是,我的一些私人存儲庫(我是唯一的貢獻者)過去的工作是使用第一個帳戶完成的。遷移的代碼似乎已被其他用戶提交。我如何強制更改所有提交以使用我的新Git作者姓名?

如果我可以做到這一點,我可以強制將更改推送到Github,並且工作看起來都是由用戶First Last完成的,這正是我想要的。

謝謝!

回答

1

您可以使用git filter-branch您的目的;具體而言,其env-filter

--env-filter <command> 
    This filter may be used if you only need to modify the environment in which 
    the commit will be performed. Specifically, you might want to rewrite 
    the author/committer name/email/time environment variables (see 
    git-commit-tree(1) for details). Do not forget to re-export the variables. 

喜歡的東西:

git filter-branch \ 
    --env-filter 'export GIT_AUTHOR_NAME="First Last"; 
       export GIT_AUTHOR_EMAIL="[email protected]"; 
       export GIT_COMMITTER_NAME="${GIT_AUTHOR_NAME}"; 
       export GIT_COMMITTER_EMAIL="${GIT_AUTHOR_EMAIL}";' \ 
    -- --all 

如果你不需要改變你的作者姓名,只是下降的GIT_AUTHOR_NAMEGIT_COMMITTER_NAME assigments。

+0

棒極了!謝謝! – dghubble

3

的最簡單方法是:從他們的新GitHub的位置

  • 變化筆者從所有提交

    我會recommend this solution,它不會盲目地改變提交(如果你合併從其他開發者那裏購買)

    #!/bin/bash 
    
    git filter-branch --env-filter ' 
    if [ "$GIT_AUTHOR_NAME" = "<old author>" ]; 
    then 
        GIT_AUTHOR_NAME="<new author>"; 
        GIT_AUTHOR_EMAIL="<[email protected]>"; 
    fi 
    if [ "$GIT_COMMITTER_NAME" = "<old committer>" ]; 
    then 
        GIT_COMMITTER_NAME="<new commiter>"; 
        GIT_COMMITTER_EMAIL="<[email protected]>"; 
    fi 
    ' -- --all