1
0

More than 3 years have passed since last update.

過去のGitコミットのAuthorとCommitterを変更したい

Posted at

前書き

誤ったメールアドレス情報でコミットしてリモートにプッシュまでしちゃった時があり、
その時の対処法の備忘録。

目的

git log及びSource Tree上に、
誤ったAuthor&Comitter情報が表示されないようにする。

やり方

色々調べて試したところ、以下の2パターンが(比較的)安全(そう)

git rebaseを使う
git replaceを使う

①だとmarge時のコミットバージョンは変更できないので、基本②が良いかも。
※git logでもmerge時のコミットは確認できないが、Source Treeには表示される。。

②は1個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

補足:
1. エディタが開かれるので、修正したいコミットのステータスをeditに変えて保存する。
2. --reset-authorで設定してあるコミット情報にauthor&comitterをまとめて反映してくれる。実行前にコミット情報が修正済みであることを確認すること。
3. 次のコミットに照準を向ける?
4. -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

補足:
1. この時点で修正対象のcommitがHEADになる。
2. ①と同じ
3. 実行すると修正後のハッシュ値が確認できなくなるので、事前にメモを取ること。
4. 対象のcommitを別のコミットで置換するコマンド。
5. 全コミットの書き換え。(危険、見た目上は特に変化はないが)
6. 修正前のバージョンが(目に見えないが)残ったままなので削除する。
7. ①と同じ。

後書き

基本的に他の方々の記事を凝縮させてもらっただけですので、不明点があれば参考サイトも見てみてください。
もっと簡単に変えられるようになれば良いなあ(セキュリティ甘くなりそうだけど)

参考

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