前書き
誤ったメールアドレス情報でコミットしてリモートにプッシュまでしちゃった時があり、
その時の対処法の備忘録。
目的
git log
及びSource Tree
上に、
誤ったAuthor&Comitter情報が表示されないようにする。
やり方
色々調べて試したところ、以下の2パターンが(比較的)安全(そう)
① git rebase
を使う
② git replace
を使う
①だとmarge時のコミットバージョンは変更できない
ので、基本②が良いかも。
※git logでもmerge時のコミットは確認できないが、Source Treeには表示される。。
②は1個1個の作業負担が大きい(その分慎重かつ安全と言えるが)
どちらにも言えるが、
修正対象は勿論それ以外のコミットハッシュ値も変わる可能性があるので、
リモートにも反映させたい場合は注意。
前提
- gitのコミット情報を修正する
$ git config --local user.name 履歴に残したい名前
$ git config --local user.email 履歴に残したいメールアドレス
修正確認はgit config --local --list
後述するgit commit --amend
に--author <履歴に残したい情報>
オプションをつけて個別に修正するやり方もあるが、
今回は一貫した修正をしたいので割愛。
① git rebase
を使う
1. git rebase -i <修正したいcommitの1個前のハッシュ値>
2. git commit --amend --reset-author
3. git rebase --continue
# 修正対象のコミットに到達するまで2と3を繰り返す。
# 以下オリジンにも反映したい場合。
4. git push origin <反映したいブランチ> -f
補足:
- エディタが開かれるので、修正したいコミットのステータスを
edit
に変えて保存する。 -
--reset-author
で設定してあるコミット情報にauthor&comitterをまとめて反映してくれる。実行前にコミット情報が修正済みであることを確認すること。 - 次のコミットに照準を向ける?
-
-f
で強制的にプッシュする。かなり危険だからチームのブランチなら周知してからやろう。
② git replace
を使う
1. git checkout <修正対象のcommitハッシュ値>
2. git commit --amend --reset-author
# この時の、HEAD(修正後のcommitになるはず)のハッシュ値をメモ
3. 元のブランチをチェックアウト
4. git replace <修正対象のcommitハッシュ値> <修正後のハッシュ値>
# 修正したいcommitの分だけ1-4を繰り返す
5. git filter-branch -- --all
6. git replace -d <(修正前の)修正対象のcommitハッシュ値>
# 以下オリジンにも反映したい場合。
7. git push origin <反映したいブランチ> -f
補足:
- この時点で修正対象のcommitがHEADになる。
- ①と同じ
- 実行すると修正後のハッシュ値が確認できなくなるので、事前にメモを取ること。
- 対象のcommitを別のコミットで置換するコマンド。
- 全コミットの書き換え。(危険、見た目上は特に変化はないが)
- 修正前のバージョンが(目に見えないが)残ったままなので削除する。
- ①と同じ。
後書き
基本的に他の方々の記事を凝縮させてもらっただけですので、不明点があれば参考サイトも見てみてください。
もっと簡単に変えられるようになれば良いなあ(セキュリティ甘くなりそうだけど)
参考
- https://www.it-swarm-ja.com/ja/git/%e7%89%b9%e5%ae%9a%e3%81%ae%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ab%e3%82%b3%e3%83%9f%e3%83%83%e3%83%88%e4%bd%9c%e6%88%90%e8%80%85%e3%82%92%e5%a4%89%e6%9b%b4%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af%e3%81%a9%e3%81%86%e3%81%99%e3%82%8c%e3%81%b0%e3%81%84%e3%81%84%e3%81%a7%e3%81%99%e3%81%8b%ef%bc%9f/969793577/
- https://qiita.com/reikkk/items/aaff2b6656467de14a5e