0
Help us understand the problem. What are the problem?

posted at

GitHubにpushしても芝生が生えないとき、過去に遡って草を再生する魔法

GitHubの芝生は主にissueやmasterへのpushなどで生えます
詳しくはここを参照

しかし、ローカルの.gitconfigに登録されているメールアドレスとリモートリポジトリのメアドが一致してないと、ローカルブランチのcommitをプッシュしても芝生に反映されません

違うアドレスでcommitしてしまったり、そもそも.gitconfigが設定されてなかったりなど、あとから気づいて困ることがあると思います

ミスしたコミットがひとつやふたつならひとつずつ手作業で解決できますが、該当コミットがいくつもある場合は一つずつやってられないのでgit filter-branchコマンドを使って修正する必要があります

過去のコミットにさかのぼって芝生を生やす方法を総括的に解説した記事が見当たらなかったので、メモがてらこの記事にまとめます

環境によってうまく行かない場合もあるようなので要注意です
すべての操作はバックアップを取った状態で行ってください

方法

ローカルブランチの過去コミットのAUTHOR情報とCOMMITTER情報を書き換えます
bash
git filter-branch -f --commit-filter '
GIT_AUTHOR_NAME="your_name"
GIT_AUTHOR_EMAIL="your_email@gmail.com"
GIT_COMMITTER_NAME="your_name"
GIT_COMMITTER_EMAIL="your_email@gmail.com"
git commit-tree "$@"
' HEAD

リモートブランチに反映させます
bash
git push -f origin master

この時点で芝生に反映されたはずなので確認してみましょう

ここからが重要なのですが、過去のコミットをすべて書き換えたため、このままだとローカルから新しいコミットをプッシュできません
またgit pull origin masterとすると以下のエラーが出ます

fatal: refusing to merge unrelated histories

そのため、一旦ローカルリポジトリを削除したあと、リモートリポジトリからクローンしてくる必要があります1

cd ../
rm -r your-repository/
git clone https://github.com/username/your-repository.git
cd your-repository/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?