概要
GitHubアカウントを複数運用していたりして、もしなんらかの理由で片方のアカウントを削除してマージしたいなんて場面になった時に向けた記事です。
マージは引き継ぐ形で行います
基本的な引き継ぎとContributionsの引き継ぎ方法について記載します。
1,基本的な引き継ぎ
基本的な部分は全て手作業による引き継ぎになります。
公式ドキュメントが参考になります。
公式ドキュメント(複数のユーザーアカウントをマージする)
https://docs.github.com/ja/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account/merging-multiple-user-accounts
リポジトリのオーナーの変更は
Setting >>Transfer ownership
によって行うことが可能です。
GitHub pagesなども引き継ぎたい場合は都度対応します。
2,Contributions(草)の引き継ぎ
GitHubのContributionsは登録しているemailと紐づいています。
そのため、過去のコミット全てのユーザー名とemailを上書きすることが可能です。
ただし、この方法はコミットが追加される(新たなコミットハッシュが生成される)ので、基本的に非推奨です。
PRを作成しても新しい差分が発生してしまうのでなんらかの特別な事情(そのリポジトリへのコントリビューションに思い入れがあるなど)がない限り捨ててしまうのが良いと思います。
コマンド
これでHEAD以下の全ての過去のコミット履歴を上書きできます。
filter-branchとforce pushを使用するのでリスクは高いです。
何が起きるかはっきりしない、不明確な部分がある場合はgitに詳しい人に相談してから行うか決めてください。
// コミットを変更する
$git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_NAME" = "<変更前の名前>" ]; then
GIT_AUTHOR_NAME="<変更後の名前>";
GIT_AUTHOR_EMAIL="<変更後のメールアドレス>";
GIT_COMMITTER_NAME="<変更後の名前>";
GIT_COMMITTER_EMAIL="<変更後のメールアドレス>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
// masterへ force pushする
$git push origin master -f
filter-branchは過去のコミット全てを操作できてしまう強力なコマンドです。