変更内容を"別ブランチに"反映させない方法

##はじめに
git-flowやGitHub Flowを学習し始めると、ブランチを分けてファイルを管理するようになります。
そして、変更内容がなぜか別ブランチにも反映されるなんて珍事件を一度は経験すると思います。
それではブランチを分ける意味がなくなってしまいます。

この記事では、専門用語を解説したうえで、
変更内容を"別ブランチに"反映させない方法を解説していきます。

###対象者
「変更内容がなぜか別ブランチにも反映されて困っている」
「とりあえずGitの勉強をしたい」

というGit初心者向けです。

この記事では<font color="Red">変更内容を"別ブランチに"反映させない方法</font>について説明しています。
そのため、Gitコマンドの仕組みなどについては詳しくは説明していません。
わからない人向けに参考サイトを用意しましのでご参照ください。
では、さっそく進めていきましょう！

###専門用語
Git...どのファイルを追加したか削除したかなどを管理するツール。
GitHub...Gitと提携してみんなとやり取りができるWebサイト。
ブランチ...作業を枝分かれさせる事。
masterブランチ...完成品用のブランチ。
developブランチ...開発用のブランチ。
リポジトリ...ファイルやフォルダを保存する場所。
コミット...どのファイルを追加したか削除したかなどを登録する事。
スタッシュ...コミットせずファイルを一時待避する事。

###環境
OS: macOS Catelina (バージョン10.15.4)
ターミナル: Terminal.app
git version: 2.24.2



##1.原因
<font color="Red">変更内容をコミットまたはスタッシュしないで
別ブランチに移動した場合、
移動先の別ブランチにも同じ内容が反映されます。</font>

コミットするかスタッシュして、別ブランチに反映させないようにしましょう。
スタッシュは、とあるブランチで作業中だけど別のブランチで他のことがやりたい
但し、作業が中途半端だからコミットはしたくない場合に使用します。
<font color="Red">コミットする場合は2-1へ。
スタッシュする場合は2-2へ。</font>

##2.対処法

Gitコマンドの仕組みはこちらの記事が参考になります。
[Gitでよく使うコマンド一覧]
(https://qiita.com/uhooi/items/c26c7c1beb5b36e7418e)

###2-1.コミットする場合



コミットしたい物を全て選択するには下記Gitコマンドを入力します。

```
git add .
```

コミットするには下記Gitコマンドを入力します。
xxxにはコミットのメッセージを入力します。


```
git commit -m "xxx"
```


GitHubのリポジトリに反映するには下記Gitコマンドを入力します。
xxxにはブランチ名を入力します。


```
git push origin xxx
```

コミット後に別ブランチを移動しましょう。
ブランチを移動するには下記Gitコマンドを入力します。
xxxには移動先のブランチ名を入力します。


```
git switch xxx
```

これで完了です。

###2-2.スタッシュする場合

スタッシュするには下記Gitコマンドを入力します。

```
git stash
```
スタッシュ後に別ブランチを移動しましょう。
別のブランチでの作業が終わったら、
元のブランチに移動しましょう。
ブランチを移動するには下記Gitコマンドを入力します。
xxxには移動先のブランチ名を入力します。


```
git switch xxx
```

退避した変更内容を戻しましょう。
まずは、退避した作業の一覧を確認しましょう。
確認するには下記Gitコマンドを入力します。

```
git stash list
```

下記のような表示が出てきます。
xxxは変更作業を行なったブランチ名です。

```
stash@{0}: WIP on xxx
stash@{1}: WIP on xxx
.
.
.
stash@{5}: WIP on xxx
```

退避した作業を戻すには下記Gitコマンドを入力します。
例)stashの0番を戻すときはxxxには0を入力して下さい。
例)stashの5番を戻すときはxxxには5を入力して下さい。

```
git stash apply stash@{xxx}
```

これで完了です。

##おわりに
お疲れ様でした！ 
これでこの問題を対処できるようになりましたね。

この記事をきっかけに、より良いGit生活が送れていただければ嬉しいです！

##参考

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">masterからdevelopのブランチをきって、<br>developでファイル修正した後、<br>masterにcheckout/switchすると、<br>developのファイル修正が<br>masterにも反映されてるけど、<br>どうしたら反映させずにすむのだろうか?<br><br>Gitのプロの方わかりますか?<a href="https://twitter.com/hashtag/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%88%9D%E5%BF%83%E8%80%85?src=hash&amp;ref_src=twsrc%5Etfw">#プログラミング初心者</a> <a href="https://twitter.com/hashtag/github?src=hash&amp;ref_src=twsrc%5Etfw">#github</a></p>&mdash; 霧崎さくや@Web Developer (@Sakuya_wd) <a href="https://twitter.com/Sakuya_wd/status/1271316723719798784?ref_src=twsrc%5Etfw">June 12, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">修正後にコミットしなければ残るので、そのことかと思いました！<br>ブランチを切り替える前にコミットするのがよくて、もしまだコミットしたくないならスタッシュに入れるのがよさそうです😌</p>&mdash; ウホーイ (@the_uhooi) <a href="https://twitter.com/the_uhooi/status/1271317322066620421?ref_src=twsrc%5Etfw">June 12, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>