2017-11-14 16 views
0

メールAをプライマリとして使用していましたが、現在はメールBをプライマリとし、Aをまったく使用しません。私はgithubプライマリ電子メールをBに変更しましたが、ローカルで.gitconfigを更新するのを忘れてしまったので、すべてのコミットのpatchは、電子メールAでユーザが作成したと言います。gitコミットの電子メールを変更しますか?

このため、私のgithubの "Contributions"の下に記録されています。

これに対する公式のgithubの反応は、私のgithubアカウントに電子メールAを追加することです。私の貢献は自動的に再構築されます。

私は可能なすべてのプラットフォームから電子メールAを削除したいと思います。代わりに私が電子メールBにしたコミットの「コミッター」を変更する方法はありますか?

答えて

2

git filter-branchこれを行うことができるはずです。基本的には、ブランチのコミット履歴全体を同じSHA1で書き換えます。

これを行う方法を示すexample script on Githubがあります。それは短いので、ここでそれを再現しています。

#!/bin/sh 

git filter-branch --env-filter ' 

OLD_EMAIL="[email protected]" 
CORRECT_NAME="Your Correct Name" 
CORRECT_EMAIL="[email protected]" 

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 

あなたがそれに歴史を変えてきたように、フィルタ処理ブランチをプッシュ強制する必要があります。誰かがあなたの支店を共有している場合、それは彼らの歴史とあなたの不一致になります - あなたのすべての協力者が編集された支店を再引っ張るようにする必要があります。彼らが古いブランチで作業していて、そのブランチをコミットしていれば、それらを新しいブランチにチェリーピックすることができます。

新しいブランチ全体を作成し、そこに履歴を更新して、誰もがそれをプルできるようにすると、これを簡単にしたいことがあります。その時点で、これは新しいマスターブランチであり、そのベースで動作することにすべて同意できます。あるいは、単にすべての人に古いマスターのコピーを削除させ、新しいブランチの名前をmasterに変更することができます。

+0

ありがとう、完璧です。それは働いたようです。私がこれをやれば、私は「押す」必要がありますか?また、他の誰もこのことをフォークしたりクローンしたりしていません。私自身のバージョン管理の利便性のための小さな個人レポです。 – Anonymous

+1

@jphollowed - リポジトリの履歴を上書きしているので、 'git push --force'を使う必要があります。 – JDB

+0

@ JDB - あなたのメモを取り込むように編集し、ブランチを使っていた人がどんなに簡単に追いつくことができるかを明確にしました。 –

関連する問題