【Git】rebase

## コミットメッセージの変更

現状確認

```sh
$ git log --oneline
e0136fa (HEAD -> master) add3
05674c6 add2
9d19a21 add1
```

編集

```
$ git rebase -i HEAD~3
```

▼変更前

```
../monaka/git_test/.git/rebase-merge/git-rebase-todo
pick 9d19a21 add1
pick 05674c6 add2
pick e0136fa add3
```

▼変更後（3番目のコミットをeditに変更）

```
../monaka/git_test/.git/rebase-merge/git-rebase-todo
pick 9d19a21 add1
pick 05674c6 add2
edit e0136fa add3
```

保存して終了すると、次にやるべきことを表示してくれている

```
$ git rebase -i HEAD~3
Stopped at e0136fa...  add3
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
```

コミットメッセージの修正

→コミットメッセージ編集画面が立ち上がるので、変更を加える

（あと、この時謎のブランチにいた）

```
$ git commit --amend 
```

▼修正完了後

```
$ git commit --amend 
[detached HEAD 6b9ea42] change add3 commit message
 Date: Sun Aug 14 12:07:04 2022 +0900
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 third.html
```

rebaseを続行

（以下を実行すると元のブランチに戻ってきてた）

```
$ git rebase --continue
Successfully rebased and updated refs/heads/master.
```

確認

```
$ git log --oneline
e0136fa (HEAD -> master) change add3 commit message
05674c6 add2
9d19a21 add1
```



## コミットの順番を入れ替える

現状確認

```
$ git log --oneline
e0136fa (HEAD -> master) change add3 commit message
05674c6 add2
9d19a21 add1
```

編集

```
$ git rebase -i HEAD~3
```

▼変更前

```
...it_test/.git/rebase-merge/git-rebase-todo Modified
pick 9d19a21 add1
pick 05674c6 add2
pick 6b9ea42 change add3 commit message
```

▼変更後（1番目のコミットと2番目のコミットの入れ替え）

```
...it_test/.git/rebase-merge/git-rebase-todo Modified
pick 05674c6 add2
pick 9d19a21 add1
pick 6b9ea42 change add3 commit message
```

編集完了後

```
$ git rebase -i HEAD~3
Successfully rebased and updated refs/heads/master.
```

確認

```
$ git log --oneline -n 3
f4abf55 (HEAD -> master) change add3 commit message
5c93e54 add1
7777adb add2
```



## コミットをまとめる

現状確認

```
$ git log --oneline -n 3
f4abf55 (HEAD -> master) change add3 commit message
5c93e54 add1
7777adb add2
```

編集

```
$ git rebase -i HEAD~3
```

▼変更前

```
.../monaka/git_test/.git/rebase-merge/git-rebase-todo
pick 7777adb add2
pick 5c93e54 add1
pick f4abf55 change add3 commit message
```

▼変更後

```
...it_test/.git/rebase-merge/git-rebase-todo Modified
pick 7777adb add2
squash 5c93e54 add1
squash f4abf55 change add3 commit message
```

コミットメッセージ編集画面（変更してもしなくてもOK）

```
      /home/monaka/git_test/.git/COMMIT_EDITMSG      
# This is a combination of 3 commits.
# This is the 1st commit message:

add2

# This is the commit message #2:

add1

# This is the commit message #3:

change add3 commit message
```

確認

```
$ git log --oneline
3ecbd1e (HEAD -> master) add2
96283d2 (origin/master) add feature　
```



## コミットを分割する

現状確認

```
$ git log --oneline
3ecbd1e (HEAD -> master) add2
```

編集

```
$ git rebase -i HEAD~1
```

▼変更前

```
...it_test/.git/rebase-merge/git-rebase-todo Modified
pick 3ecbd1e add2
```

▼変更後

```
...it_test/.git/rebase-merge/git-rebase-todo Modified
edit 3ecbd1e add2
```

editと記載されているコミットのコミットを取り消して、ステージングしていない状態に戻す

- git reset コマンド：コミットを取り消してステージングしていない状況まで戻す
- HEAD^（キャレット）：editと記載したコミットを指す

```
$ git reset HEAD^
```

確認

```
$ git status
interactive rebase in progress; onto 96283d2
Last command done (1 command done):
   edit 3ecbd1e add2
No commands remaining.
You are currently editing a commit while rebasing branch 'master' on '96283d2'.
  (use "git commit --amend" to amend the current commit)
  (use "git rebase --continue" once you are satisfied with your changes)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        first.html
        second.html
        third.html

nothing added to commit but untracked files present (use "git add" to track)
```

first.htmlとsecond.htmlをコミット

```
$ git add first.html second.html 
$ git commit -m 'add1&2'
[detached HEAD c8c96fd] add1&2
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 first.html
 create mode 100644 second.html
```

third.htmlをコミット

```
$ git add third.html 
$ git commit -m 'add3'
[detached HEAD eb18196] add3
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 third.html
```

リベース

```
$ git rebase --continue
Successfully rebased and updated refs/heads/master.
```

確認

```
$ git log --oneline
eb18196 (HEAD -> master) add3
c8c96fd add1&2
```



## コミットの削除

確認

```
$ git log --oneline -n 3
eb18196 (HEAD -> master, origin/master) add3
c8c96fd add1&2
96283d2 add feature
```

編集

```
$ git rebase -i HEAD~3
```

▼変更前

```
.../monaka/git_test/.git/rebase-merge/git-rebase-todo
pick 96283d2 add feature
pick c8c96fd add1&2
pick eb18196 add3
```

▼変更後

```
...it_test/.git/rebase-merge/git-rebase-todo Modified
pick 96283d2 add feature
```

確認

```
$ git log --oneline -n 3
96283d2 (HEAD -> master) add feature
```



### 参考
https://www.udemy.com/course/unscared_git/