Git rebaseでfirst commitまで遡ってまとめる
2022-10-11
私は、git rebaseで散らかったコミットをまとめる悪事を良くやるのだが、first commitまで遡ってまとめる方法をいつも忘れるので、備忘メモとして残しておく
first commitまで遡ってまとめる
まずは、現状について
「first commit」(最初のコミット)の後に「first commit2」というコミットがあって、「first commit2」を「first commit」に統合してまとめたい
commit c1477334620bf2a70ede887b4dedc52664030a18 (HEAD -> main) |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Tue Oct 11 00:13:00 2022 +0900 |
commit 6be53827f5ba33e82f84a705f7228bb395d5b860 |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Mon Oct 10 23:56:30 2022 +0900 |
「first commit」まで遡るには「 -i –root」で指定する必要がある
git rebaseコマンドを打つとエディタが立ち上がるので、「first commit2」の方を「pick→fixup」に書き換える
※ 書き換え前
pick 6be5382 first commit |
pick c147733 first commit2 |
※ 書き換え後
pick 6be5382 first commit |
fixup c147733 first commit2 |
書き換えが終わると、「Successfully…」というメッセージが表示される
Successfully rebased and updated refs/heads/main. |
再びコミットログを確認すると、無事に統合されている
commit 7f6d2fe20c2f278c388beecf3d5932f1211d8c2c (HEAD -> main, origin/main) |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Mon Oct 10 23:56:30 2022 +0900 |
git pushするときは普通にはpushできないと思うので
! [rejected] main -> main (non-fast-forward) |
hint: Updates were rejected because the tip of your current branch is behind |
hint: its remote counterpart. Integrate the remote changes (e.g. |
hint: 'git pull ...' ) before pushing again. |
hint: See the 'Note about fast-forwards' in 'git push --help' for details. |
「-f」オプション付きでpushする(「-f」オプション付きでpushする権限が無ければ付けておく)
% git push -f origin main |
Enumerating objects: 4, done . |
Counting objects: 100% (4/4), done . |
Delta compression using up to 4 threads |
Compressing objects: 100% (3/3), done . |
Writing objects: 100% (4/4), 835 bytes | 835.00 KiB/s, done . |
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 |
+ 6be5382...7f6d2fe main -> main (forced update) |
途中のコミットまでまとめる
本来こちらの方がよくやる方法なのでおまけで書いておく
first commitまで遡るのではなく、途中のコミットまでまとめたいとき
今回の例では、「geko commit」「fuga commit」を「hoge commit 」に統合してまとめたい
commit 8de2190379b01c53a36c7ecfff26594681bcdfe0 (HEAD -> main) |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Tue Oct 11 00:16:31 2022 +0900 |
commit de6196af391e466dccc6e235c8348afdfac9c74e |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Tue Oct 11 00:16:06 2022 +0900 |
commit 54464c65b1d480067caf8902ebc7c28f4dc60dfa |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Tue Oct 11 00:15:54 2022 +0900 |
commit 34711d593c227baa3f4144f16c9e0f3e2e567a28 |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Mon Oct 10 23:56:30 2022 +0900 |
3コミット分遡ってまとめるので「-i HEAD~3」を指定する
「geko commit」と「fuga commit」を「pick→fixup」に書き換える
※ 書き換え前
※ 書き換え後
fixup de6196a fuga commit |
fixup 8de2190 geko commit |
書き換えが終わると、「Successfully…」というメッセージが表示される
Successfully rebased and updated refs/heads/main. |
再びコミットログを確認すると、無事に統合されている
commit 5d2a000f6af74d07aeb63391d1620c7812f53cfc (HEAD -> main) |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Tue Oct 11 00:15:54 2022 +0900 |
commit 34711d593c227baa3f4144f16c9e0f3e2e567a28 |
Author: yoshi-island <1111111+yoshi-island@ users .noreply.github.com> |
Date: Mon Oct 10 23:56:30 2022 +0900 |
git pushするときは、「first commit」にまとめたときと同様に「-f」オプション付きでpushする
% git push -f origin main |
以上。