背景
この文章は次の二つの仕様が欲しい人にとっては参考になれるかもしれません。
1. ローカルのWorktreeで編集したものをコメント付きコミットXしてから、直前のコメントXを書き直したくて。新しいコミットX+1をするわけではなく、直前のコミットXのコメントだけ書き直す方法。ローカルとリモート両方とも書き直し。
2. 直前のコミットよりもっと前のコミットのコメントを編集したい。ローカルとリモート両方とも書き直したい。
コマンド
1. git commit --amend
2. git reflog
3. git rebase -i HEAD@{n}
4. git push --force-with-lease repository branch
操作
1.直前のコミットのコメントを編集する
Mac-3:imageTab syoui$ git status
On branch tmp
Untracked files:
(use "git add <file>..." to include in what will be committed)
New_Concept_English.txt
nothing added to commit but untracked files present (use "git add" to track)
iMac-3:imageTab syoui$ git add -A
iMac-3:imageTab syoui$ git commit -m "New Concept English"
[tmp e1bb85f] New Concept English
1 file changed, 3 insertions(+)
create mode 100644 New_Concept_English.txt
iMac-3:imageTab syoui$ git push origin tmp
Counting objects: 21, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (21/21), 1.92 KiB | 982.00 KiB/s, done.
Total 21 (delta 8), reused 0 (delta 0)
remote: Resolving deltas: 100% (8/8), completed with 1 local object.
To github.com:xu1718191411/LearningAndroid.git
d14b0ee..e1bb85f tmp -> tmp
ここでtmpブランチでNew_Concept_English.txtのファイルを作って"New Concept English"というコメントをつけて、リモートのtmpブランチへpushした。
しかし、"New Concept English"ではなく、"New Concept English Chapter 1"というコメントに書き換えたい時どうすればいいのか.
iMac-3:imageTab syoui$ git commit --amend
そして編集画面が出てくる、画面にはもっともっと入れたコメントが入っていて、それを編集して保存します.図1のように
図1
そしてgit logで過去のコミットを調べたら、コメントはもう"New Concept English Chapter 1"に書き換えられました。
iMac-3:imageTab syoui$ git log
commit b6012933a73d90cd78b8737e87ea005dcd972992 (HEAD -> tmp)
Author: syoui <>
Date: Wed Feb 7 13:49:48 2018 +0900
New Concept English Chapter 1
ローカルの環境では既存の直前のコミットのコメントを編集したが、リモートのrepositoryはまた前のコメントだから、強制的にリモートの直前コミットを上書きする。
iMac-3:imageTab syoui$ git status
On branch tmp
nothing to commit, working tree clean
iMac-3:imageTab syoui$ git push --force-with-lease origin tmp
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 410 bytes | 410.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:xu1718191411/LearningAndroid.git
+ e1bb85f...b601293 tmp -> tmp (forced update)
そしたら、直前のコミットのコメントはローカルとリモート両側には編集済み。
2.コミット履歴の中のコミットのコメントを編集する。
図2のように、e1bb85fのコミットのコメントを"New Concept English Chapter 1"から"Create New Concept English Chapter 1"に編集したい場合には、もうgit commit --amendを使えなくなる。なぜかという、e1bb85fのコミットはもう直前のコミットではなくなりました。
どうすればいいかというと。
iMac-3:imageTab syoui$ git log
commit 74cdbe3409fb2f8c158b331327651dfc86b0eccb (HEAD, tmp)
Author: syoui <>
Date: Wed Feb 7 14:25:13 2018 +0900
New Concept English Chapter 3
commit 8608ee6d8bc5e1212a2bad24ec61bf6c27d6cb15
Author: syoui <>
Date: Wed Feb 7 14:23:08 2018 +0900
New Concept English Chapter 2
commit e1bb85f7a4b8d749cd675f5bae8c78cbcee4f472
Author: syoui <>
Date: Wed Feb 7 13:49:48 2018 +0900
New Concept English
commit 88c163828eadc42e274a13f21e655916cdd14b74
Author: syoui <>
Date: Wed Feb 7 11:44:10 2018 +0900
add test.md
以下のコマンドから実行すれば、88c163828eadc以降から(e1bb85fから)のコミットをまとめて、現時点にrebaseします。
git rebase -i 88c163828eadc
出てきた画面ではe1bb85fからのコミット情報をロストとして画面の一番上に表示されています。コメントを編集したいコミットの前にpをrに変更してwqで保存して次へ。
次の画面では選択した(rを付けた)コミットに対してコメントを編集する画面です。元のコメントが画面の一番上に表示されていて、編集してwq保存して次へ。
図4
保存したらも現時点へのrebaseが完成します。
[detached HEAD 15ebcbb] Create New Concept English
Date: Wed Feb 7 13:49:48 2018 +0900
1 file changed, 3 insertions(+)
create mode 100644 New_Concept_English.txt
Successfully rebased and updated refs/heads/tmp.
コミットログから見れば、もう前のコメントが書き換えられました。
iMac-3:imageTab syoui$ git log
commit c5659f7f9ebd479e5855cefd4d4ae86ae2a618f7 (HEAD -> tmp)
Author: syoui <>
Date: Wed Feb 7 14:25:13 2018 +0900
New Concept English Chapter 3
commit 4bafdb6beb22243b98c8f27b6c9aa3f3934a4e48
Author: syoui <>
Date: Wed Feb 7 14:23:08 2018 +0900
New Concept English Chapter 2
commit 15ebcbbb10d55a055e42815c8f6a0e4292a6d4a3
Author: syoui <>
Date: Wed Feb 7 13:49:48 2018 +0900
Create New Concept English
commit 88c163828eadc42e274a13f21e655916cdd14b74
Author: syoui <>
Date: Wed Feb 7 11:44:10 2018 +0900
add test.md
SourceTreeから見れば、コメントも変更されました。
図5
最後にリモートのrepositeryも更新します。ここの微妙のところはみんなが使っているブランチだったらうまくいかないかもしれません。その時にgit push -f origin tmp。でも慎重に検討する必要があります。
iMac-3:imageTab syoui$ git push --force-with-lease origin tmp
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 933 bytes | 933.00 KiB/s, done.
Total 9 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), completed with 1 local object.
To github.com:xu1718191411/LearningAndroid.git
+ fca5bbc...c5659f7 tmp -> tmp (forced update)