今の状況
4つのファイルがある。
$ ls
a b c d
a→b→c→dの順にファイルを作成してコミットした。
本来は4回のコミットに分けるべきだったが、3回にしてしまった。
2回目のコミットを2つに分けたい。
$ git log
commit b7d7a993f7bce58701fac5b9526db21afc04ccbb (HEAD -> main) // (三回目)
Author: yuu
Date: Wed Apr 6 20:44:46 2022 +0900
add d
commit b3889b0a5b71cfc3cf2412a25518d74d6823a235 // (二回目)
Author: yuu
Date: Wed Apr 6 20:44:16 2022 +0900
add b, c
commit 336eebd502046ebbe4bd8068661d07d5c6c61b7e // (一回目)
Author: yuu
Date: Wed Apr 6 20:41:17 2022 +0900
add a
git resetを使う
git reset --soft commit_ID
で任意のcommitまで戻ることができる。ただ、変更済みのファイルは手元に残る。
// 一回目のIDを指定。一回目のコミットまで戻る。が、二回目と三回目で加えた変更は手元に残っている。
$ git reset --soft 336eebd502046ebbe4bd8068661d07d5c6c61b7e
// 二回目と三回目のコミットがなくなっている
$ git log
commit 336eebd502046ebbe4bd8068661d07d5c6c61b7e (HEAD -> main)
Author: yuu
Date: Wed Apr 6 20:41:17 2022 +0900
add a
// コミットは消えたが変更したファイルは残る
$ ls
a b c d
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: b
new file: c
new file: d
手元にはa,b,c,dの4つのファイルがあり、aの追加だけがコミット済みである。
ここからファイル名を指定してgit add
をして、一回ずつコミットしていけばいい。
$ git add b
$ git commit -m "add b"
$ git add c
$ git commit -m "add c"
$ git add d
$ git commit -m "add d"
できました〜!!
コミットの履歴が綺麗だとコードレビューをがしやすいので、レビュー依頼を出す前に綺麗にしたいですね。
$ git log
commit 36fd1b2cb82d3810ad64b6c5f40890b97df904de (HEAD -> main)
Author: yuu
Date: Wed Apr 6 21:09:21 2022 +0900
add d
commit 68a195940a5c444c885d8b0bce714f2a4a56f25d
Author: yuu
Date: Wed Apr 6 21:09:06 2022 +0900
add c
commit 9e80cb253401d315e978147bfbf8701ab9acc7d0
Author: yuu
Date: Wed Apr 6 21:07:28 2022 +0900
add b
commit 336eebd502046ebbe4bd8068661d07d5c6c61b7e
Author: yuu
Date: Wed Apr 6 20:41:17 2022 +0900
add a