リベースの基本操作について
リベース(rebase)でできること
操作イメージ
(Before)
A---B---C test
/
D---E---F---G master
(After)
A'--B'--C' test
/
D---E---F---G master
操作コマンド
# 現在のブランチの確認
git branch --contains
# ブランチの切替
git checkout test
# リベースの実行
git rebase master
▼実行前
* bbac238 - add sample4.txt (HEAD -> test) (6 minutes ago:2020-06-16 14:17:47 +0900) <Erika>
* 770ae3b - add sample3.txt (7 minutes ago:2020-06-16 14:16:39 +0900) <Erika>
| * f3bf129 - add sample2.txt (master) (7 minutes ago:2020-06-16 14:17:16 +0900) <Erika>
| * 1241db9 - add sample1.txt (8 minutes ago:2020-06-16 14:15:51 +0900) <Erika>
|/
* 5f09f67 - initial commit (origin/master) (3 hours ago:2020-06-16 11:10:42 +0900) <Erika>
▼実行後
* 380e11d - add sample4.txt (HEAD -> test) (5 seconds ago:2020-06-16 14:24:16 +0900) <Erika>
* fd4e19b - add sample3.txt (5 seconds ago:2020-06-16 14:24:16 +0900) <Erika>
* f3bf129 - add sample2.txt (master) (7 minutes ago:2020-06-16 14:17:16 +0900) <Erika>
* 1241db9 - add sample1.txt (9 minutes ago:2020-06-16 14:15:51 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (3 hours ago:2020-06-16 11:10:42 +0900) <Erika>
何が起こっているか
1.testにはあるが、masterには無いコミットが一時退避される
2.masterに移動
3.1.で退避したコミットを再適用
リベースのオプションについて
指示コマンド一覧
コマンド | 説明 |
---|---|
(p)pick | コミットをそのまま残す。デフォルト。 |
(r)reword | コミットメッセージを変更。 |
(e)edit | コミット自体の内容を編集。 |
(s)squash | 直前のpickを指定したコミットに統合。メッセージも統合。 |
(f)fixup | 直前のpickを指定したコミットに統合。メッセージは破棄。 |
Reword
操作コマンド
# rebaseの実行
git rebase -i 5f09f67 # 一番古いチェックポイントを選択するのがポイント
# オプションステータスを変更
reword e728b16 add test text
reword e08fe63 add test2 text
# コミットメッセージの変更
add test text aaa
add test2 text bbb
▼実行前
* 686d1fe - add test2 text (HEAD -> master) (25 minutes ago:2020-06-16 11:24:36 +0900) <Erika>
* e728b16 - add test text (38 minutes ago:2020-06-16 11:12:15 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (39 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
▼実行後
* a76999e - add test2 text bbb (HEAD -> master) (44 seconds ago:2020-06-16 12:04:43 +0900) <Erika>
* dafdee3 - add test text aaa (60 seconds ago:2020-06-16 12:04:27 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (55 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
Edit
操作コマンド
# rebaseの実行
git rebase -i 5f09f67 # 一番古いチェックポイントを選択するのがポイント
# オプションステータスを変更
edit e728b16 add test text
edit e08fe63 add test2 text
# e728b16のコミットを編集(ファイル追加&コミットメッセージの変更)
$ touch sample2.txt
$ git commit --amend -m 'add file sample2.txt'
$ git rebase --continue
# 686d1feのコミットを編集(ファイル追加&コミットメッセージの変更)
$ touch sample3.txt
$ git commit --amend -m 'add file sample3.txt'
$ git rebase --continue
▼実行前
* 686d1fe - add test2 text (HEAD -> master) (25 minutes ago:2020-06-16 11:24:36 +0900) <Erika>
* e728b16 - add test text (38 minutes ago:2020-06-16 11:12:15 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (39 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
$ ls -la
drwxr-xr-x - erika 16 6 12:07 .git
.rw-r--r-- 297 erika 16 6 11:08 .gitconfig
.rw-r--r-- 5 erika 16 6 12:07 sample.txt
▼実行後
* ee7f98e - add file sample3.txt (HEAD -> master) (17 seconds ago:2020-06-16 12:09:47 +0900) <Erika>
* 8f4c1e2 - add file sample2.txt (76 seconds ago:2020-06-16 12:08:48 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (59 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
$ ls -la
drwxr-xr-x - erika 16 6 12:08 .git
.rw-r--r-- 297 erika 16 6 11:08 .gitconfig
.rw-r--r-- 11 erika 16 6 12:08 sample.txt
.rw-r--r-- 0 erika 16 6 12:08 sample2.txt
.rw-r--r-- 0 erika 16 6 12:09 sample3.txt
Squash
操作コマンド
# rebaseの実行
git rebase -i 5f09f67 # 一番古いチェックポイントを選択するのがポイント
# オプションステータスの変更
pick e728b16 add test text # 一番古いコミットはpickのままにすることがポイント
squash 686d1fe add test2 text
# コミットメッセージの編集
# This is the 1st commit message:
# add test text
# This is the commit message #2:
# add test2 text
add test text sq # 新しいコミットメッセージを記載
▼実行前
* 686d1fe - add test2 text (HEAD -> master) (25 minutes ago:2020-06-16 11:24:36 +0900) <Erika>
* e728b16 - add test text (38 minutes ago:2020-06-16 11:12:15 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (39 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
▼実行後
* 89a32e7 - add test text sq (HEAD -> master) (4 minutes ago:2020-06-16 11:54:10 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (48 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
Fixup
操作コマンド
# rebaseの実行
git rebase -i 5f09f67 # 一番古いチェックポイントを選択するのがポイント
# オプションステータスの変更
pick e728b16 add test text # 一番古いコミットはpickのままにすることがポイント
fixup 686d1fe add test2 text
▼実行前
* 686d1fe - add test2 text (HEAD -> master) (4 seconds ago:2020-06-16 11:24:36 +0900) <Erika>
* e728b16 - add test text (12 minutes ago:2020-06-16 11:12:15 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (14 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
▼実行後
* 50039c2 - add test text (HEAD -> master) (5 seconds ago:2020-06-16 11:44:09 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (34 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
その他のrebaseコマンド
実行を元に戻す
操作コマンド
* 50039c2 - add test text (HEAD -> master) (5 seconds ago:2020-06-16 11:44:09 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (34 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
▼実行前
$ git reset --hard 686d1fe
▼実行後
* 686d1fe - add test2 text (HEAD -> master) (25 minutes ago:2020-06-16 11:24:36 +0900) <Erika>
* e728b16 - add test text (38 minutes ago:2020-06-16 11:12:15 +0900) <Erika>
* 5f09f67 - initial commit (origin/master) (39 minutes ago:2020-06-16 11:10:42 +0900) <Erika>
rebaseを中止する
# rebaseを中止する
git rebase --abort