Gitのコミットを綺麗にしたいけど、リベースが怖かったので練習してみた

# はじめに
CVS、SVN、の流れでGitが主流になってなんとなくGitを使っていました。
とある現場で、プッシュする前に可能であればコミットログを綺麗にして欲しい。
でも無理そうなら、そのままプッシュしていいから！

とお話を受けたけど当時、余裕もなくGitに不慣れだったので、そのままプッシュしていました。

そこから流れて、コミットログを綺麗にしてプッシュする。という事を求められる事も無かったのですが、改めてやってみたいな。と思ったので、ちょっとやってみました。

# シチュエーション
test2機能を作っていて、Aサービスを追加してコミットしたあと、あ、Aサービス関連でコミットが漏れた！ので追加コミット！

とすると、Aサービス追加というコミットが2つに分離してしまった。

ので、リベースでコミットを集約

# やりたきことの流れ
２つ目の漏れによる追加コミットを１個目のコミットに統合して、プッシュ！

# やってみる
## 事前準備
```
git switch develop
git branch feature/test2-A
git switch feature/test2-A
echo 'A-service-method' >> A-Service.txt
echo 'A-serviceA-DTO' >> A-Service-DTO.txt
```

## １個目のコミット
Aサービスをコミットしたけど、A-service-DTOをコミットし忘れた。
```
git add A-Service.txt
git commit -m 'Aサービスの追加'
```

## ２個目のコミット
追加でA-service-DTOをコミット。
```
git add A-Service-DTO.txt
git commit -m 'AサービスのDTO追加'
```
## ログは？
```
git log --oneline
```
```
$ git log --oneline
8d6d29b (HEAD -> feature/test2-A) AサービスのDTO追加
a4ab18c Aサービスの追加
```

## ２個目のコミットを１個目のコミットに合体！
```
git rebase -i HEAD~2
```
```
pick a4ab18c Aサービスの追加
pick 8d6d29b AサービスのDTO追加

# Rebase 3ef6ba0..8d6d29b onto 3ef6ba0 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
#                    commit's log message, unless -C is used, in which case
#                    keep only this commit's message; -c is same as -C but
#                    opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
```
を
```
pick a4ab18c Aサービスの追加
squash 8d6d29b AサービスのDTO追加
```

に変更して、wq
続いてメッセージも、

```
# This is a combination of 2 commits.
# This is the 1st commit message:

Aサービスの追加

# This is the commit message #2:

AサービスのDTO追加

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
～ 中略 ～
```
をいかに変更（２個目はコメントアウト）

```
# This is a combination of 2 commits.
# This is the 1st commit message:

Aサービスの追加

# This is the commit message #2:

#AサービスのDTO追加

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

```


## まとめたログは？
おー！１個に変わった！
```
git log --oneline
```

```
$ git log --oneline
f4d5b6a (HEAD -> feature/test2-A) Aサービスの追加
```

## ブランチをプッシュ
リモートに初プッシュなので、強制オプションが無くても正常にプッシュ完了！
```
git push origin feature/test2-A
```


```
$ git push origin feature/test2-A
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 428 bytes | 428.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote:
remote: Create a pull request for 'feature/test2-A' on GitHub by visiting:
remote:      https://github.com/tarosuke777/sandbox/pull/new/feature/test2-A
remote:
To https://github.com/tarosuke777/sandbox
 * [new branch]      feature/test2-A -> feature/test2-A
```