LoginSignup
0
0

More than 3 years have passed since last update.

Gitのリベース操作について

Last updated at Posted at 2020-06-16

リベースの基本操作について

リベース(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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0