いつも通りぽちぽち仕事をしていたら、「コミット履歴がプライベート用のgitアカウントになってる」という珍事件がおきました。
そもそもコミット履歴って何に紐づいているの?ってところから、実際の修正方法を記載していきます。
コミット履歴に紐づくGitアカウントについて
コミット履歴に紐づくGitアカウントはどのように決まるのかというと、ずばりコミットを行ったときのuser.nameとuser.emailに基づいて決まるようです。Git の各リポジトリやグローバルな設定には、user.name(コミット履歴に表示されるユーザー名) と user.email(コミット履歴に表示されるメールアドレス)の情報が記録されており、コミット時にその設定が使用されるとのこと。
実際にやったこと
1. 現状の設定を確認
まず、現在のリポジトリで使われているGitのユーザー名とメールアドレスを確認します。
git config --get user.name
git config --get user.email
これを実行すると、現在設定されている user.name と user.email が表示されます。実際に確認したところ、やはりプライベート用のアカウントが表示されていたので、これを修正していく必要があります。
2. ローカルリポジトリでのGit設定を修正
次に、現在のリポジトリ内で使うGitのユーザー情報を仕事用のアカウントに変更します。これにより、このリポジトリでのコミットが仕事用のアカウントに紐付けられるようになります。
git config user.name "仕事用のユーザー名"
git config user.email "仕事用のメールアドレス"
この設定は、現在のリポジトリに対してのみ適用されるので他のプロジェクトには影響しません。
ちなみに、グローバル設定を変更することで全てのリポジトリに対して変更をかけることもできますが、私はリポジトリによって使い分けたいので、ローカルリポジトリ内での変更に留めました。
グローバル設定を変更したいときは、以下のコードで変更できるみたいです。
git config --global user.name "仕事用のユーザー名"
git config --global user.email "仕事用のメールアドレス"
これで今後のコミットについては、仕事用のアカウントに紐付けることができました。次の章からは過去のコミット履歴のアカウントを修正する方法について見ていきます。
3. 過去のコミット履歴を修正する方法
過去のコミット履歴を遡って修正していきます。git rebase や git filter-branch を使用する方法などありますが、私はgit rebaseで修正していきました。
1. インタラクティブリベースを開始する
変更したいコミットよりも古いコミットを指定して、インタラクティブリベースを開始します。私は、直近 5 件のコミットの中に修正したいコミットがあったので、以下のように実行しました。
git rebase -i HEAD~5
コマンドを実行すると、過去 5 回分のコミットがリストされたテキストエディタが開きます。この画面で各コミットの操作を指定できます。
2. エディタの操作
エディタが開いたら、insertモードにして修正したいコミットの前に editと書きます。
edit を指定することで、そのコミットに対して変更を加えられるようになります。
指定が終わったら、escを押して、:wqでエディタを閉じましょう。
3. コミットのユーザー情報を変更する
コミットを edit で選択すると、リベースが一時停止してそのコミットの状態になります。この状態で以下のコマンドを実行すると、ユーザー名やメールアドレスを変更できます。
git commit --amend --author="新しいユーザー名 <新しいメールアドレス>"
修正が完了したら、リベースを続行します。
git rebase --continue
これで、指定したコミットのユーザー名とメールアドレスが変更されます。