手帳

  • 2025-03-05
  • IT系

現在VPS+VSCode+RemoteSSHで作業をしているのですが、複数のGitHubアカウントを利用しているため、先日初めて本来使うべきでないGitHubアカウントでコミットをしてしまいました。

Pull Request後に気が付き、なんとか履歴からユーザーを変更できないかとClaudeさんに相談したところ「git-filter-repo」を使うと良いと教えてもらえました。

git-filter-repoをインストール

# まず初めにPython3とpipをインストール
sudo apt update
sudo apt install python3 python3-pip

# git-filter-repoをインストール
pip3 install git-filter-repo

# git-filter-repoをPATHに追加する
# (インストール後に「.local/bin」にインストールされたという警告が出た場合)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

ローカルリポジトリ履歴の書き換え

git filter-repo --commit-callback "
    if commit.committer_name == b'間違えたアカウント':
        commit.committer_name = b'正しいアカウント'
        commit.committer_email = b'正しいアカウントのメールアドレス'
        commit.author_name = b'正しいアカウント'
        commit.author_email = b'正しいアカウントのメールアドレス'
" --force

Gitのcommitterとauthorについて

ちなみにGitでは、committerとauthorはちゃんと使い分けています。

Author(作者)

  • コードを実際に書いた人
  • 「誰がこのコードを書いたのか」を示す
  • パッチや機能を最初に作成した人物

Committer(コミッター)

  • 実際にそのコードをリポジトリにコミットした人
  • コードをレビューして受け入れた人や、他人のパッチを適用した人など
  • GitHubでPull Requestをマージした場合、あなたが作者ではなくてもコミッターになる

リモートリポジトリの書き換え

git-filter-repoは、フィルタリング後に誤ってリモートリポジトリを上書きしないために自動的にoriginリモートを削除します。そこでもう一度リモートリポジトリのセットアップをしてから強制pushします。

#新しいリモートを追加
git remote add origin git@github.com:ユーザー名/レポジトリ名.git

git push --force origin <<書き換えたいブランチ>>

これで、GitHub上でのコミット履歴が正しいアカウントに修正されます!