前のブランチをチェックアウトするのに git checkout の引数としてダッシュを使えるよ
git checkout コマンドの引数としてダッシュを使うと, 現在のブランチをチェックアウトする前のブランチをチェックアウトして戻ることができます.
Git のバージョンは 2.18.0
になります.
git checkout -
で前のブランチに戻る
例えば, 現在 master
ブランチと feature
ブランチがあるとして, master
ブランチをチェックアウトしているとします:
$ git branch
feature
* master
git branch
コマンドで表示されるブランチの前の *
は今現在チェックアウトされているという意味です.
そして feature
ブランチをチェックアウトします:
$ git checkout feature
Switched to branch 'feature'
ここで master
ブランチをチェックアウトして master
ブランチに戻る場合, git checkout master
とすることもできますが, ダッシュ -
を使うとチェックアウトする前のブランチを指定できるので -
を使っても master
ブランチをチェックアウトできます:
$ git checkout -
Switched to branch 'master'
ちなみに, もう一度 -
を使うと feature
ブランチをチェックアウトします:
$ git checkout -
Switched to branch 'feature'
このように -
を使って, ブランチを交互にチェックアウトすることもできます.
-
は @{-1}
の速記
ちなみに git checkout -
の -
は @{-1}
の速記です.
なので @{-1}
を使っても前のセクションと同じことができます:
$ git branch
feature
* master
$ git checkout feature
Switched to branch 'feature'
$ git checkout @{-1}
Switched to branch 'master'
$ git checkout @{-1}
Switched to branch 'feature'
@{-N}
の意味
@{-1}
の -1
は一つ前にチェックアウトしたブランチを意味しますので, @{-2}
となれば二つ前にチェックアウトしたブランチ, @{-3}
となれば三つ前にチェックアウトしたブランチ, 同じ要領で @{-4}
, @{-5}
, @{-6}
, @{-7}
, @{-8}
, @{-9}
, @{-10}
…@{-N}
と続けられます.
例 1) @{-2}
で二つ前のブランチに戻る:
$ git branch
a
b
* master
$ git checkout a
Switched to branch 'a'
$ git checkout b
Switched to branch 'b'
$ git checkout @{-2}
Switched to branch 'master'
例 2) @{-3}
で三つ前のブランチに戻る:
$ git branch
a
b
c
* master
$ git checkout a
Switched to branch 'a'
$ git checkout b
Switched to branch 'b'
$ git checkout c
Switched to branch 'c'
$ git checkout @{-3}
Switched to branch 'master'
例 3) @{-10}
で 10 個前のブランチに戻る:
$ git branch
a
b
c
d
e
f
g
h
i
j
* master
$ git checkout a
Switched to branch 'a'
$ git checkout b
Switched to branch 'b'
$ git checkout c
Switched to branch 'c'
$ git checkout d
Switched to branch 'd'
$ git checkout e
Switched to branch 'e'
$ git checkout f
Switched to branch 'f'
$ git checkout g
Switched to branch 'g'
$ git checkout h
Switched to branch 'h'
$ git checkout i
Switched to branch 'i'
$ git checkout j
Switched to branch 'j'
$ git checkout @{-10}
Switched to branch 'master'
-
をマージやリベースでも使う
-
や @{-N}
の使用は git checkout <branch>
の <branch>
だけにとどまりません.
次のようなマージやリベースでも使うことができます.
例 1) master
ブランチをマージする:
$ git branch
feature
* master
$ git checkout feature
Switched to branch 'feature'
$ git merge -
例 2) master
ブランチを基に feature
ブランチをリベースする:
$ git branch
feature
* master
$ git checkout feature
Note: checking out 'feature'.
$ git rebase -
まとめ
git checkout -
というコマンドは一つ前にチェックアウトしたブランチを再度チェックアウトする時に使えます.
さらに前のブランチをチェックアウトする場合は git checkout @{-N}
で可能です.
また -
や @{-N}
という表記法は git checkout
コマンドにとどまらず, git merge
や git rebase
コマンドでも使うことができます.
ところで git checkout -
というコマンド, シェルコマンドの cd -
とよく似ていますね.
シェルコマンドの cd -
は, cd
する前のパスに cd
するというものです.
また cd -
は cd -1
の速記です.
なので cd -N
というように書くこともできます.
一例として次のように使えます:
$ pwd
/Users/yu8mada
$ cd workspace
$ pwd
/Users/yu8mada/workspace
$ cd -
$ pwd
/Users/yu8mada
なので cd -
に馴染みのある方には, Git の git checkout -
はとてもしっくりくる構文なのではないかなと思います.
Git のブランチのチェックアウト操作は日常的に行うものだと思いますので, git checkout <branch>
に加えて git checkout -
や git checkout @{-N}
も使っていけるといいですね.
参考資料
関連記事
git rebase でヒストリを直線的にする方法と使う時の注意点2018.08.13
git merge オプションの --ff, --no-ff, --ff-only の違い2018.08.15
Git のファストフォワードマージとは2018.08.15
Git の Pull コマンドの使い方2018.06.07
Git で変更されたファイルを部分的にステージする方法2018.11.01