LoginSignup
0
1

More than 3 years have passed since last update.

GitのAuthorを書き換えたい時に試すこと

Posted at

はじめに

先日、GitHubを見ると下記の画像のようなコミット履歴になっていました。

image.png

octcatになっている画像があります。
これは、コミットする際に自分のGitniメールアドレスを設定していなかったため、AuthorComiterに反映されていなかったためです。
このAuthorを書き換えるために大ハマりしたので、新たな犠牲者を出さないためにも今回はこれを直す手順をいくつか書いていきたいと思います。

Gitの設定を見てみる

まず、以下のコマンドでGitの設定をみる事ができます。

$ git config --global --list
(略)
user.name=SeijiNumata(ユーザー名)
user.email=sample.seiji@gmail.com(メールアドレス)
(略)

ここが空欄になっていたりすると、AuthorComitterが空白となり、コミットの画像がoctcatになります。
設定するには、下記コマンドでできます。

$ git config --local user.name "ユーザー名"
$ git config --local user.email メールアドレス

これはプロジェクトをまたいだ全体の設定(グローバル)になりますので、ディレクトリだけに設定したい時は下記コマンドを実行しましょう。

$ git config --local user.name "ユーザー名"
$ git config --local user.email メールアドレス

これでpushをすると、設定したあとのコミットはComitterを変更する事ができます。
しかし、過去のコミットのAuthorComitterを変更することはできません。

過去のコミットのAuthorとComitterを変更する

まず、下記コマンドでAuhorComitterがどうなっているのかを見てみましょう。

$ 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(コミットメッセージ)

ここで、直したいコミットのpickeditにしてあげます。

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本体の不具合を疑うというのも解決アプローチとしてはあるというアドバイスも頂きました。


ここまでで今回の記事は終わりです。
少しでもお役に立てれば幸いです!
最後まで読んで頂き、ありがとうございました!!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1