GitHubのコミット履歴で user1 committed with user2と表示されることがあります。その理由と修正方法を紹介します。
GitHubのコミット履歴で通常は、
user1 committed 28 minutes ago
などと表示されますが、
user1 committed with user2 28 minutes ago
などと二人の名前が表示されることがあります。
これは、authorとcommitterが異なる場合にこのように表示されます。
この場合、user1がauthorで、user2がcommitterになっています。
これは、rebase や cherry-picking をした場合に起こります。
例えば、元々user1が作成しcommitしていたcommitを、user2がrebaseすると、user2がそのファイルのcommitterに変わります。
authorとcommitter名をコンソールで確認するには、
git cat-file -p HEAD
とか
git cat-file -p 9e84
などとします。-pの後には調べたいcommitをハッシュなどで指定します。なお、
git log --oneline
とすると、ハッシュを調べることが出来ます。
すると、次のようにauthorとcommitter名が表示されます。
tree 8277c3da1712cf117d16bad4c1ec988acb81c062 author user1 <user1@foobar.com> 1494421247 +0900 committer user2 <user2@foobar.com> 1494421247 +0900 first commit
これを履歴を残さず修正したい場合は、
git filter-branch
を使いますが、gitは履歴を残すためのシステムですので、それに反する悪のコマンドです。使うと怒られる場合があります。
次のようにすると、committer名がuser2であるコミットについて、committer名 をuser1に書き換えます。
git filter-branch --commit-filter ' if [ "$GIT_COMMITTER_NAME" = "user2" ]; then GIT_COMMITTER_NAME="user1"; GIT_AUTHOR_NAME="user1"; GIT_COMMITTER_EMAIL="user1@foobar.com"; GIT_AUTHOR_EMAIL="user1@foobar.com"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD
今回authorは変更しないので、then以降のGIT_AUTHOR_NAMEとGIT_AUTHOR_EMAILは書かなくても良いです。authorも他のユーザに書き換えたいときには、ここも変更します。
そして、git push -fでリモートを書き換えます。
以上、GitHubのコミット履歴で user1 committed with user2と表示される理由でした。