- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

git

はじめに Edit

gitでコミットログを修正したいです。

Redmineとかで、refs #10とかcloses #10とかつけるとコミットログにチケットを関連付けられますが、これがよく書き忘れるんですね…。

直前のコミットログを修正する方法あるみたいです。
直前のコミットログ以外も修正する方法はないのかな…。
(Subversionだとhookスクリプトで許可できますよね。分散型だとやっぱり無理?)

コミットログを修正する方法 Edit

直前のコミットログを修正する方法 Edit

直前のコミットログの修正は"git commit --amend" でよいみたいです。

例えば、

$ git commit -m "fixed xxx bug"
  :   # コミット完了!
# あ!しまった!"refs #(チケット番号)"つけるの忘れてた!
# (私が使うプロジェクト管理ツールRedmineではrefs #13 のようにすると
#  コミットを該当チケットに関連付けてことができるため、
#  できれば付けておきたいのです)
$ git commit --amend -m "fixed xxx bug, refs #10"
$ $ git log -1     # 確認(うまくいってますね)
commit xxxxxxxxxxxxxxxxxxx
Author: jampan <japman@exapmle.com>
Date:   Wed May 12 12:00:11 2010 +0900

    fixed xxx bug, refs #10

これでOK
うまくいきましたか?
こんな感じ。

ただし、Redmineでは何故か修正前のコミットログも残ってしまいますけど…(?)。(git logではちゃんと上書きされているように見える)

直前のコミット以外のコミットメッセージを修正する方法 Edit

下記サイトが参考になりました。

git rebase -i を使用します。

手順的には、過去直近3つ分を書き換えたい場合、

$ git rebase -i HEAD~3

すると以下のようなコミットのリストが記載された内容でテキストエディタが立ち上がるので、修正したいコミットの部分の行頭のpickをedit(eでも可)に書き換え保存しエディタを終了します (※ 内容はPro gitのページから転載)

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file

# Rebase 710f0f8..a5f4a0d onto 710f0f8
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

あとは、

$ git commit --amend -m "(新しいコミットメッセージ)"

もしくは以下だとテキストエディタが立ち上がるので、新しいコミットメッセージを入力して終了します。

$ git commit --amend

あとは、rebase --continueで次のコミットに移ります。

$ git rebase --continue

あとは、最初にrebase -i でeditに書き換えた分だけ、
"git commit --amend"→"git rebase --continue"を繰り返します。

これでOK!!

作者とコミッターを修正したい Edit

作者やコミッター情報を修正をしたい場合、
git config user.name とgit config user.emailの設定して、
直前のコミットの場合は--amendしてコミットすればOKに見えますが、それだけではコミッター(Commit:)は変わるのですが、作者(Author:)は変わりません(´・ω・`)

作者も変えたい場合は、--amend と --author="ユーザ名 <メールアドレス>"と指定すればOKみたいです。

修正例 Edit

間違えて古い名前でコミットしてしまった!

# git commit -a -m "test test test"
$ git log -1 --pretty=full
commit xxxxxxxxxxxxxxx
Author: my_old_name <old_name@example.com>
Commit: my_old_name <old_name@example.com>

    test test test

ユーザー名を変更して --amendで再コミットしても、Author:が変わらない(´・ω・`)

$ git config user.name "my_new_name"
$ git config user.email new_name@example.com
$ git commit --amend -m "test test test"
$ git log -1 --pretty=full
commit xxxxxxxxxxxxxxx
Author: my_old_name <old_name@example.com>
Commit: my_new_name <new_name@example.com>

    test test test

コミット時に--amendと--authorを指定したら行けました!

$ git commit --amend -m "test test test" --author="my_new_name <new_name@example.com>"
 :
$ git log -1 --pretty=full
commit xxxxxxxxxxxxxxx
Author: my_new_name <new_name@example.com>
Commit: my_new_name <new_name@example.com>

    test test test

OK!!

直前のコミットログ以外のユーザー名の修正 Edit

git filter-branch で修正してバックアップを削除でいいのかな?
↓参考参照

参考:

参考リンク Edit


No comment. Comments/git/コミットログを修正する方法?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2011-11-11 Fri 23:33:11 JST (1112d)