はじめに
先日、GitHubを見ると下記の画像のようなコミット履歴になっていました。
octcatになっている画像があります。
これは、コミットする際に自分のGitniメールアドレスを設定していなかったため、Author
やComiter
に反映されていなかったためです。
このAuthorを書き換えるために大ハマりしたので、新たな犠牲者を出さないためにも今回はこれを直す手順をいくつか書いていきたいと思います。
Gitの設定を見てみる
まず、以下のコマンドでGitの設定をみる事ができます。
$ git config --global --list
(略)
user.name=SeijiNumata(ユーザー名)
user.email=sample.seiji@gmail.com(メールアドレス)
(略)
ここが空欄になっていたりすると、Author
やComitter
が空白となり、コミットの画像がoctcatになります。
設定するには、下記コマンドでできます。
$ git config --local user.name "ユーザー名"
$ git config --local user.email メールアドレス
これはプロジェクトをまたいだ全体の設定(グローバル)になりますので、ディレクトリだけに設定したい時は下記コマンドを実行しましょう。
$ git config --local user.name "ユーザー名"
$ git config --local user.email メールアドレス
これでpushをすると、設定したあとのコミットはComitter
を変更する事ができます。
しかし、過去のコミットのAuthor
やComitter
を変更することはできません。
過去のコミットのAuthorとComitterを変更する
まず、下記コマンドでAuhor
やComitter
がどうなっているのかを見てみましょう。
$ git log --pretty=full
commit 8952226c3ab88e520308dc06ac140c7fe01b0fc5
Author: SeijiNumata <>
Commit: SeijiNumata <>
wc
commit e00b26e5e30d7283d31149a0dcb5407ca8b1ff37
Author: SeijiNumata <>
Commit: SeijiNumata <>
make lscommand
commit c2cdd355838beca82c799929c320652a09f00c7d
Author: SeijiNumata <>
Commit: SeijiNumata <>
#first commit
メールアドレスが空になっている事が確認できました。
これを直すには、以下の3つの手順を実行すると良いです。
①下記コマンドを実行
$ git rebase -i <コミットID>
ここのコミットIDは、直したいコミットの一個前が良いです。
もしも直したいコミットが一番最初のコミットであるならば,
$ git rebase -i --root <コミットID>
で一番前のコミットでもrebase
する事ができます。
② ①のコマンドを実行すると、下記のような画面になります。
pick c2cdd35 #first commit # empty(コミットメッセージ)
pick e00b26e make lscommand(コミットメッセージ)
pick 8952226 wc # empty(コミットメッセージ)
ここで、直したいコミットのpick
をedit
にしてあげます。
edit c2cdd35 #first commit # empty(コミットメッセージ)
pick e00b26e make lscommand(コミットメッセージ)
edit 8952226 wc # empty(コミットメッセージ)
できたら、:wq
で保存してあげましょう。
③下記コマンドを、editと書き換えた分だけ繰り返す
$ git commit --amend --reset-author
$ git rebase --continue
これで直る人は直ると思うので、$ git log --pretty=full
で確認してみてください。
上記手順を実行しても変わらなかった時
rebaseのコマンドを実行し、pickをeditに変えるところまでは前までと同じです。
その後に、$ git commit --amend --reset-author
の代わりに、下記コマンドを繰り返してみましょう。
% git commit --amend --author="ユーザー名 <メールアドレス>"
% git rebase --continue
上記手順を実行しても変わらなかった時②
コミットをするときに、--allow-empty
というコマンドを実行して空のコミットをしていると、上記2つの手順でもAuthorを書き換える事ができません。
その時は、rebase
,pick→edit
までは同じように実行して、下記コマンドを繰り返すようにしましょう。
$ git commit --amend --author="ユーザー名 <メールアドレス> " --no-edit --allow-empty
% git rebase --continue
直ってるかどうか、$ git log --pretty=full
で確認できます。
私はこの--allow-empty
をつけるという事に気がつけなくて、とても時間がかかりました。
% git commit --amend --author
をしているときに、
No changes
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
このようなログが出ていたことに気がついたメンターさんに、
変更がない(No changes)→コミットにdiffがない→--allow-empty
で試してみたらどう?
というご指摘をして頂き、なんとか解決する事ができました。。
出力されたメッセージをしっかり読むというのは、非常に大事な事ですね。
また、バージョンなどを確認してgit本体の不具合を疑うというのも解決アプローチとしてはあるというアドバイスも頂きました。
ここまでで今回の記事は終わりです。
少しでもお役に立てれば幸いです!
最後まで読んで頂き、ありがとうございました!!