PHP Manual
/
実践からの経験

Git でコミットの所有者を変更する

08. 03. 2022

組織間でリポジトリを移行する場合、コミットオーナーを上書きする必要が生じることがよくあります。その理由は、ユーザーの電子メールアドレスの変更などにより、あるアカウントから別のアカウントにコミットを転送することが考えられます。

例えば、Listの古いメールアカウントから、2つ目のGmailアカウントにすべてのコミットを転送する必要がありました。私がこのような変更を要求する可能性がある2つ目のケースは、私が誤ってプライベートな電子メールでコミットしてしまったが、特定の会社が自分たちのドメインでコミットすることを望んでいる場合です。

幸い、この問題を解決するコマンドがあり、それをプロジェクトマスターで呼び出すだけで、履歴をすべて上書きすることができるのです。

git filter-branch --env-filter "
if [ \"\$GIT_COMMITTER_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
export GIT_COMMITTER_NAME=\"Jan Barášek\"
export GIT_COMMITTER_EMAIL=\"janbarasek@gmail.com\"
fi
if [ \"\$GIT_AUTHOR_EMAIL\" = \"janbarasek@seznam.cz\" ]
then
export GIT_AUTHOR_NAME=\"Jan Barášek\"
export GIT_AUTHOR_EMAIL=\"janbarasek@gmail.com\"
fi
" $@ --tag-name-filter cat -- --branches --tags

コマンドを実行した後は、git push -f コマンドを使用して変更をマスターに反映させる必要があります。

警告:

コマンド実行後、コミット履歴が全て上書きされ、ハッシュが変更されます。稀にしか発生しないはずのBCブレークです。コミットの上書きを間違えた場合、履歴を復元することはできません。同時に、すべてのブランチを削除または上書きする必要があります。そうしないと、変更されたすべてのコミットについて競合が発生し、解決時に二重書き込み(元のコミットと新しいコミット)になってしまいます。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
5.
Status:
All systems normal.
2024