LoginSignup
252
210

More than 3 years have passed since last update.

間違えて違うブランチで作業を始めてしまったときの対処法【Git】

Last updated at Posted at 2020-09-12

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の他にも便利なことはたくさんあるので、少しずつ覚えていきたいですね。

252
210
7

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
252
210