LoginSignup
3
2

More than 1 year has passed since last update.

【Git】1つのコミットを2つに分割したい

Last updated at Posted at 2022-04-06

今の状況

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
3
2
1

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
3
2