LoginSignup
0
0

More than 1 year has passed since last update.

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

Posted at

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/
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0