gitリポジトリのコミットの修正をやってみた
user.nameを変更して、しばらくしてから元に戻したけど、その間のコミットに名前が残っているのを修正するため、コミット履歴の修正をやってみた。
修正前の状態確認
本作業の目的は以下の二つ。
- コミットログの「TAKAMATSU Makoto」を「Takamatsu Makoto」に変更する。
- user.nameの変更を削除する。
修正前のコミットログを確認する。
$ git log --pretty="format:%ad %h (%an): %s" --date=short
2013-09-07 ba85118 (TAKAMATSU Makoto): eclipse/pleiades起動関数定義位置変更と処理修正 2013-09-07 5e4936f (TAKAMATSU Makoto): 誤記修正 2013-01-26 28605ab (Takamatsu Makoto): 自宅用設定 2013-09-02 fe397df (TAKAMATSU Makoto): merge --no-ff設定、コメント修正 2013-08-31 c8ebefb (Takamatsu Makoto): 位置変更と空行追加 2013-08-31 dd36049 (Takamatsu Makoto): pull --rebase設定、マージツール設定
user.nameを変更したコミットを確認する。
$ git show fe397df
commit fe397dff8f543d3475a66994d086544807872310 Author: TAKAMATSU Makoto <******@***.**.**> Date: Mon Sep 2 08:15:14 2013 +0900 merge --no-ff設定、コメント修正 diff --git a/.gitconfig b/.gitconfig index bb47302..09b1fd4 100644 --- a/.gitconfig +++ b/.gitconfig @@ -1,5 +1,5 @@ [user] - name = Takamatsu Makoto + name = TAKAMATSU Makoto email = ******@***.**.** [core] @@ -28,9 +28,10 @@ default = upstream # defaultのpush先はtrackingしているリポジトリ [pull] - rebase = true # pullするときはrebaseする + rebase = true # git pull --rebase [merge] + ff = false # git merge --no-ff tool = winmerge [mergetool "winmerge"]
コミットの修正開始
git rebase -iでコミットログの修正を開始する。
$ git rebase -i fe397df~
エディタが開いて以下の内容が表示されるので、ここで修正対象のコミットを指定する。
pick fe397df merge --no-ff設定、コメント修正 pick 28605ab 自宅用設定 pick 5e4936f 誤記修正 pick ba85118 eclipse/pleiades起動関数定義位置変更と処理修正
修正対象のコミットのpickをeditに変更してファイルを保存する。
edit fe397df merge --no-ff設定、コメント修正 pick 28605ab 自宅用設定 edit 5e4936f 誤記修正 edit ba85118 eclipse/pleiades起動関数定義位置変更と処理修正
コミットの修正(1/4)
以下のメッセージが表示されてrebaseが中断される。
Stopped at fe397df... merge --no-ff設定、コメント修正 You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue
このコミットでuser.nameを修正しているので、まずはこれを元に戻す。
$ vi .gitconfig
name = TAKAMATSU Makoto ↓ name = Takamatsu Makoto
修正内容をインデックスに追加。
$ git add .gitconig
修正内容をコミットしてrebaseを継続する。コミットログの名前の変更は--authorを指定する必要あり。(参考:Gitポケットリファレンス)
$ git commit --amend --author="Takamatsu Makoto <******@***.**.**>" $ git rebase --continue
コミットの修正(2/4)
edit指定していない箇所はgitで自動処理されるので操作なし。
コミットの修正(3/4)
Stopped at 5e4936f... 誤記修正 You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue
ファイル修正は無しで、author指定してコミットするだけ。
$ git commit --amend --author="Takamatsu Makoto <******@***.**.**>" $ git rebase --continue
コミットの修正(4/4)
Stopped at ba85118... eclipse/pleiades起動関数定義位置変更と処理修正 You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue
(3/4)と同じくファイル修正は無しで、author指定してコミットするだけ。
$ git commit --amend --author="Takamatsu Makoto <******@***.**.**>" $ git rebase --continue
修正後の状態確認
修正後のコミットログを確認する。
$ git log --pretty="format:%ad %h (%an): %s" --date=short
2013-09-07 02f3b49 (Takamatsu Makoto): eclipse/pleiades起動関数定義位置変更と処理修正 2013-09-07 5006c73 (Takamatsu Makoto): 誤記修正 2013-01-26 c46dac2 (Takamatsu Makoto): 自宅用設定 2013-09-02 9e6f070 (Takamatsu Makoto): merge --no-ff設定、コメント修正
コミットログの名前の変更はできている。
user.nameの変更が無いことを確認する。
$ git show 9e6f070
commit 9e6f070a0a932830db90e97013f9c907647c4ed9 Author: Takamatsu Makoto <******@***.**.**> Date: Mon Sep 2 08:15:14 2013 +0900 merge --no-ff設定、コメント修正 diff --git a/.gitconfig b/.gitconfig index bb47302..7bd7411 100644 --- a/.gitconfig +++ b/.gitconfig @@ -28,9 +28,10 @@ default = upstream # defaultのpush先はtrackingしているリポジトリ [pull] - rebase = true # pullするときはrebaseする + rebase = true # git pull --rebase [merge] + ff = false # git merge --no-ff tool = winmerge [mergetool "winmerge"]
user.nameの変更もなくなっている。
ここまでの作業はhomeブランチで行ったもので、次に修正結果をmasterブランチに反映する。
現時点でのコミットツリーの状態は以下のようになっている。
$ git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
* 02f3b49 Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (HEAD, home) * 5006c73 Takamatsu Makoto 誤記修正 * c46dac2 Takamatsu Makoto 自宅用設定 * 9e6f070 Takamatsu Makoto merge --no-ff設定、コメント修正 | * fe397df TAKAMATSU Makoto merge --no-ff設定、コメント修正 (origin/master, master) |/ * c8ebefb Takamatsu Makoto 位置変更と空行追加 * dd36049 Takamatsu Makoto pull --rebase設定、マージツール設定
コミットログ修正をmasterに反映
masterブランチからfe397dfを削除できれば簡単だがコミットの削除はできないので、ひとつ前のコミットに戻してからhomeブランチの修正コミットを反映する。(追記:この文章を見直していて git reset --hard 9e6f070 のほうが良かったのではないかと思った。)
$ git checkout master
$ git reset --hard HEAD~
git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset' * 02f3b49 Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (home) * 5006c73 Takamatsu Makoto 誤記修正 * c46dac2 Takamatsu Makoto 自宅用設定 * 9e6f070 Takamatsu Makoto merge --no-ff設定、コメント修正 | * fe397df TAKAMATSU Makoto merge --no-ff設定、コメント修正 (origin/master) |/ * c8ebefb Takamatsu Makoto 位置変更と空行追加 (HEAD, master) * dd36049 Takamatsu Makoto pull --rebase設定、マージツール設定
homeブランチから自宅用設定以外のコミットをマージする。
$ git cherrypick 9e6f070 $ git cherrypick 5006c73 $ git cherrypick 02f3b49 $ git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
* 73bccde Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (HEAD, master) * dac6eb1 Takamatsu Makoto 誤記修正 * dc874f6 Takamatsu Makoto merge --no-ff設定、コメント修正 | * 02f3b49 Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (home) | * 5006c73 Takamatsu Makoto 誤記修正 | * c46dac2 Takamatsu Makoto 自宅用設定 | * 9e6f070 Takamatsu Makoto merge --no-ff設定、コメント修正 |/ | * fe397df TAKAMATSU Makoto merge --no-ff設定、コメント修正 (origin/master) |/ * c8ebefb Takamatsu Makoto 位置変更と空行追加 * dd36049 Takamatsu Makoto pull --rebase設定、マージツール設定
コミットログ修正をリモートリポジトリに反映
$ git push -f $ git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
* 73bccde Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (HEAD, origin/master, master) * dac6eb1 Takamatsu Makoto 誤記修正 * dc874f6 Takamatsu Makoto merge --no-ff設定、コメント修正 | * 02f3b49 Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (home) | * 5006c73 Takamatsu Makoto 誤記修正 | * c46dac2 Takamatsu Makoto 自宅用設定 | * 9e6f070 Takamatsu Makoto merge --no-ff設定、コメント修正 |/ * c8ebefb Takamatsu Makoto 位置変更と空行追加 * dd36049 Takamatsu Makoto pull --rebase設定、マージツール設定
最後
masterブランチとhomeブランチで同じ内容のコミットが重複しているので整理しておく。
$ git checkout home $ git rebase master $ git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
* 7e04896 Takamatsu Makoto 自宅用設定 (HEAD, home) * 73bccde Takamatsu Makoto eclipse/pleiades起動関数定義位置変更と処理修正 (master, origin/master) * dac6eb1 Takamatsu Makoto 誤記修正 * dc874f6 Takamatsu Makoto merge --no-ff設定、コメント修正 * c8ebefb Takamatsu Makoto 位置変更と空行追加 * dd36049 Takamatsu Makoto pull --rebase設定、マージツール設定
- 作者: 岡本隆史,武田健太郎,相良幸範
- 出版社/メーカー: 技術評論社
- 発売日: 2012/07/10
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 103回
- この商品を含むブログ (21件) を見る