tl;dr
ある日, 社のイケメンエンジニア S 氏に「かっぱさんのプルリク, コミットまとめてくださいねー」とカジュアルに言われて, 「こ, コミットをまとめる??そんなん, やったことない」な状態になってしまったので, 手元の練習リポジトリでプルリクエストのコミットをまとめるチュートリアルをやったのでメモしておきます.
チュートリアル
ブランチを切る
$ git clone git@github.com:inokappa/test001.git $ git checkout -b 'matome-test'
修正する -> コミット -> 修正する -> コミット...
$ echo 'test1' >> README.md $ git add README.md $ git commit -m 'test1' $ echo 'test2' >> README.md $ git add README.md $ git commit -m 'test2' $ echo 'test3' >> README.md $ git add README.md $ git commit -m 'test3' $ echo 'test4' >> README.md $ git add README.md $ git commit -m 'test4' $ echo 'test5' >> README.md $ git add README.md $ git commit -m 'test5'
リポジトリにプッシュしてプルリクエストを作成
$ git push -u origin matome-test Enumerating objects: 17, done. Counting objects: 100% (17/17), done. Delta compression using up to 12 threads Compressing objects: 100% (15/15), done. Writing objects: 100% (15/15), 1.56 KiB | 1.56 MiB/s, done. Total 15 (delta 4), reused 0 (delta 0) remote: Resolving deltas: 100% (4/4), done. remote: remote: Create a pull request for 'matome-test' on GitHub by visiting: remote: https://github.com/inokappa/test001/pull/new/matome-test remote: To github.com:inokappa/test001.git * [new branch] matome-test -> matome-test Branch 'matome-test' set up to track remote branch 'matome-test' from 'origin'.
プルリクエストを作成.
コミットが 5 つ並んでいることがわかります.
イケメンエンジニアに怒られる
コミットをまとめる
まずは, コミットをまとめる際, コミットのログを確認してコミット ID を確認します.
$ git log commit db271fb99382d122fdfe398dfb4cf6bd37374ae0 (HEAD -> matome-test, origin/matome-test) Author: inokappa <inokara@gmail.com> Date: Tue Jun 23 23:40:01 2020 +0900 test5 commit 1d33ea46079f3dc2ee2d560e26cdfd49cb44af01 Author: inokappa <inokara@gmail.com> Date: Tue Jun 23 23:40:01 2020 +0900 test4 commit ac826c4eb710838a7195e5d0f1723d04bf14689a Author: inokappa <inokara@gmail.com> Date: Tue Jun 23 23:40:01 2020 +0900 test3 commit b7b065e1a40f829db2ae0718bc92f05d7dd94f66 Author: inokappa <inokara@gmail.com> Date: Tue Jun 23 23:40:01 2020 +0900 test2 commit d5e24c5f8837d26f81e02cb9ec2eaf93300c7831 Author: inokappa <inokara@gmail.com> Date: Tue Jun 23 23:40:01 2020 +0900 test1 commit 483d4d6f0b4e697b876b4d27bce64a73d7106938 (origin/master, origin/HEAD, master) Merge: 12cee31 e5d0bad
コミットログ test1
(コミット ID: d5e24c5f8837d26f81e02cb9ec2eaf93300c7831
) からコミットログ test5
(コミット ID: db271fb99382d122fdfe398dfb4cf6bd37374ae0
) について, コミットログ test1
に全部まとめたいと思います. そうすれば, 5 つ登録されていたコミットを 1 つにまとめることが出来そうです.
以下のように git rebase -i ${まとめるコミットの 1 つ前のコミット ID}
を実行します. ちなみに -i
は --interactive
の省略オプションです.
$ git rebase --interactive 483d4d6f0b4e697b876b4d27bce64a73d7106938
コミットログ test1
(コミット ID: d5e24c5f8837d26f81e02cb9ec2eaf93300c7831
) にまとめる為, その一つ前のコミット ID: 483d4d6f0b4e697b876b4d27bce64a73d7106938
を指定しています. コマンドを実行すると以下のように出力されます.
pick d5e24c5 test1 pick b7b065e test2 pick ac826c4 test3 pick 1d33ea4 test4 pick db271fb test5 # Rebase 483d4d6..db271fb onto 483d4d6 (5 commands) # # Commands: ...
pick d5e24c5 test2
から pick db271fb test5
を以下のように修正して保存します.
pick d5e24c5 test1 s b7b065e test2 s ac826c4 test3 s 1d33ea4 test4 s db271fb test5 # Rebase 483d4d6..db271fb onto 483d4d6 (5 commands) # # Commands: ...
保存すると, さらに以下のように, まとめるコミットの全てのコミットメッセージを修正する為にエディタが開きます.
# This is a combination of 5 commits. # This is the 1st commit message: test1 # This is the commit message #2: test2 # This is the commit message #3: test3 # This is the commit message #4: test4 # This is the commit message #5: test5 ...
これを以下のように修正して保存します.
まとめてしまいます. # This is a combination of 5 commits. # This is the 1st commit message: test1 (まとめられます) # This is the commit message #2: test2 (まとめられます) # This is the commit message #3: test3 (まとめられます) # This is the commit message #4: test4 (まとめられます) # This is the commit message #5: test5 (まとめられます) ...
保存すると, 以下のように出力されました.
[detached HEAD c0f7634] まとめてしまいます. Date: Tue Jun 23 23:40:01 2020 +0900 1 file changed, 5 insertions(+) Successfully rebased and updated refs/heads/matome-test.
リポジトリに Force プッシュ
あとは, 以下のようにリポジトリに Force プッシュします. (既にリポジトリにプッシュしている為)
$ git push -u origin matome-test --force Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 440 bytes | 440.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:inokappa/test001.git + db271fb...c0f7634 matome-test -> matome-test (forced update) Branch 'matome-test' set up to track remote branch 'matome-test' from 'origin'.
完
プルリクエストでコミットがまとめられていることを確認出来ました!
git log でも以下のように確認出来ます.
$ git log commit c0f7634eb0614b82de332534cb928aa7fb353170 (HEAD -> matome-test, origin/matome-test) Author: inokappa <inokara@gmail.com> Date: Tue Jun 23 23:40:01 2020 +0900 まとめてしまいます. test1 (まとめられます) test2 (まとめられます) test3 (まとめられます) test4 (まとめられます) test5 (まとめられます)
以上
コミットをまとめてもイケメンにはなれませんでしたが, 今まで, git は clone
か push
か pull
くらいしか使ったこと無かったけど, 自分でやってみるとなんとなく理解しました. ありがとう, S 氏.