web-dev-qa-db-ja.com

以前のコミットのgitメールを変更する

だから私は以前のコミットのメールアドレスを変更する方法についてたくさん読んだが、何らかの理由で私のものは更新されていない。

ローカルメール([email protected])を使用してプライベートリポジトリに40回コミットするのが好きでした。これは、このメールがgithubに関連付けられていない(関連付けられていない)ためです。

その後、以前にgit.configを設定する必要があったことを思い出したので、次のようにしました。

 git config user.email "[email protected]"

テストコミットを行ったところ、完全に機能しました。

以前のすべてのコミットをこの新しい電子メールに戻す方法はありますか?

私はこの質問をSO Gitでの複数のコミットの作成者とコミッター名と電子メールを変更する で読んでこれを使用しました

 git filter-branch -f --env-filter "                         
                    GIT_AUTHOR_EMAIL='[email protected]'; 
                    GIT_COMMITTER_EMAIL='[email protected]';
                    " 
                HEAD

しかし、それはDID機能しません.... local電子メールアドレスとして.patch拡張子を持つ以前のコミットの電子メールをまだ見ることができます

11
Kevin Cohen

あなたは確かにこのように一度に多くのコミットのために彼を行うことができます:

git rebase -i HEAD~40 -x "git commit --amend --author 'Author Name <[email protected]>' --no-edit"

私はこれを この答え でうまく解決しました。

17
Chris Maes

あなたがあなたの質問(あなたが見つけた答えへのリンク)で述べたように、これは確かにスクリプトです。

注意:

filter-branchrebaseを実行しています(willrewriteブランチの履歴)これは、ブランチのコピーを持っていたすべての人がそれを削除して再度チェックアウトする必要があることを意味します。


スクリプトOriginはここからです- Git-Tools-Rewriting-History

# Loop over all the commits and use the --commit-filter
# to change only the email addresses

git filter-branch --commit-filter '

    # check to see if the committer (email is the desired one)
    if [ "$GIT_COMMITTER_EMAIL" = "<Old Email>" ];
    then
            # Set the new desired name
            GIT_COMMITTER_NAME="<New Name>";
            GIT_AUTHOR_NAME="<New Name>";

            # Set the new desired email
            GIT_COMMITTER_EMAIL="<New Email>";
            GIT_AUTHOR_EMAIL="<New Email>";

            # (re) commit with the updated information
            git commit-tree "$@";
    else
            # No need to update so commit as is
            git commit-tree "$@";
    fi' 
HEAD

スクリプトは何をしますか?

すべてのコミットをループし、一致するものが見つかると、コミッターの名前と電子メールを置き換えます。

7
CodeWizard