はじめに
この記事で行なっている作業はコミット履歴を全て更新するため、自分しかコミットしていないリポジトリ向けです。
問題発生
BitBucketからGitHubへのリポジトリ移行作業を行なっていたところ、移したリポジトリのコミットがコントリビューションに反映されないという問題が起きました。
原因
せっかくリポジトリを移したなら草も生やしたいものです。
原因を調べてみると、昔のリポジトリにコミットした時のauthorと今のGitHubアカウントに設定しているauthorのメールアドレスが異なるため、コントリビューションに反映されないのだということが判明。
解決方法
コミット内容に問題があると分かったため、修正します。
まず現在設定しているauthorの情報を見るためにローカルでgit config --list
を実行。
gon@hon-no-MBP ~ % git config --list --global
user.name=gon
user.email=new-gon@example.co.jp
core.excludesfile=/Users/gon/.gitignore_global
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
user.emailがGitHubに設定しているメールアドレスと同じなら大丈夫です。
次に問題のリポジトリをローカルにクローン。クローンしたリポジトリに移動し、git filter-branch
コマンドを実行。authorとcommitterのメールアドレスと名前を現在使用しているものに変更しましょう。
git filter-branch
は一度に大量のコミットを書き換えられる便利なコマンドです。
詳しくはこちら。
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='gon'; GIT_AUTHOR_EMAIL='new-gon@example@example.co.jp'; GIT_COMMITTER_NAME='gon'; GIT_COMMITTER_EMAIL='a-new@example@example.co.jp'
;" HEAD
その後、もう一度git log
でコミット履歴を確認すると、コミットのauthorのメールアドレスが先ほど設定したものに変わっています。
最後にGitHubにgit force push
します。
git force push
は使いたくない場合は、GitHubに新しくリポジトリを作ってそちらにpushしてもいいかと思います。
ここまで終えたら、コントリビューションを確認します。
無事草が生えていたら喜びましょう!