1. 状況
例えば新しい機能を実装しようとコードを書いていて、
「ん..?これってmasterブランチじゃね..?!」
と気づいたとき。
そしてまだcommitはしてないけど、既に結構ファイルをいじってしまっている。。
..そんな状況における対処法をさくっと解説します。
結論として、全然大丈夫です!
(実際に自分がmasterで作業していて焦ったので、情報共有します..)
2. やること
簡単に流れを説明すると、
①今の作業ブランチを確認する
②変更してしまった作業分を退避させる
③本来作業したかったブランチにその変更を反映させる
です。
3. 実際にやってみる
①今の作業ブランチを確認
$git branch
で今の作業ブランチを確認します。
$git branch
feature/#7_add_modal_for_posting
feature/#9_add_user_name_to_posts
* master
今回の例の場合は、本当はfeature/#9..
というブランチで作業したかったのに、masterで作業している状態になっています。(やば..)
②変更してしまった作業分を退避させる
まずはmasterブランチなどで書き始めてしまったコードを退避させましょう。
イメージ的には仮置き場に移動させる、といった感じです。
これには$git stash
というコマンドを使います。
$git stash
Saved working directory and index state WIP on master: ○○
これで間違えて書き始めてしまったmasterブランチでの作業を退避することができました。
念のため$git status
で状態を確認してみましょう。
$git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
masterブランチが綺麗な状態になっていることが確認できます。
ちなみにstash
は「隠して蓄える」という意味です。
③本来作業したかったブランチに変更を反映させる
stashで退避させたら、$git checkout ブランチ名
で本来作業したかったブランチに切り替えます。
$git checkout feature/#9_add_user_name_to_posts
そして先ほどstashに退避させた変更分を、切り替えたブランチに反映させます。
$git stash apply
これで作業は完了です。 あとは続きからのコードを気持ちよく書いていけばOKです!
## ④おまけ `$git stash list`で現在のstashの状態を確認できます。
$git stash list
stash@{0}: WIP on master: ○○
stash@{1}: WIP on master: ××
stash@{2}: WIP on master: △△
このように複数のstashがあり、特定のstashをブランチに反映させたい場合は、
$git stash apply stash@{1}
のようにstashを指定してapplyすればOKです。
逆に先程のようにオプションに何も指定しなければ、最後に退避させたstashがブランチに反映されます。
その他、Gitで困ったことがあったらこちらの記事が非常に参考になります。
「Gitでやりたいこと、ここで見つかる」
LGTM1000超えの神バイブル。
Gitで困ったことはだいたいこれで解決します。
今回のgit stashの他にも便利なことはたくさんあるので、少しずつ覚えていきたいですね。