# git stash

main branchにて作業しますので、別のbranchにいる場合はmain branchに切り替えましょう。

その状態でVSCodeを開き、`a.txt`を以下のように編集します。

<pre class="language-html" data-title="a.txt"><code class="lang-html">sample1
tarou
hello
<strong>world
</strong></code></pre>

この状態で、前章で作成した`feature1`に切り替えようとするとエラーになるかと思います。

これは`feature1`にて`a.txt`を編集しており、作業branchでも`a.txt`を編集していて、commitをしていない場合に、起こり得ます。

この時にcommitをすれば、問題なくbranchを切り替えることができるのですが、まだ作業が途中で、commitをしたくない場合は、`git stash`を使います。`git stash`をすると、変更分を一時保存することができます。

(`-a`は追跡していないファイルも全て取り込むオプションで、`-m`はstashする際のメッセージをつけるオプションです。）

```bash
git stash push -am "worldを追加(一時保存)"
```

stashすると、作業branchでの変更分が無くなったかと思います。

stashしたものは、以下のコマンドにて確認することができます。

```bash
git stash list
```

上記コマンドにて、以下のようにstashしたものが表示されるかと思います。

<figure><img src="https://1869761657-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcUBbYqol4PMzZJggiMqV%2Fuploads%2FvYkSc3EYjYxQN8KPO3Tv%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202023-11-27%2012.31.53.png?alt=media&#x26;token=d237aaad-28de-460d-b514-851ccbc676be" alt=""><figcaption></figcaption></figure>

もしstashしたものを元に戻す場合は、`git stash apply`を叩きます。applyする際は、どのstashを適応するか指定する必要があり、indexを指定します。indexは、`git stash list`を叩いた際に表示される`stash@{0}`の0にあたります。以下のコマンドを叩きましょう。

```bash
git stash apply 0
```

再度stashしましょう。-mを省略した場合は、メッセージに最後のcommitメッセージがあてられます。

```bash
git stash push -a
```

git stash listにて表示されるものを消したい場合は、`git stash drop`を叩きます。dropする際も同様にindexを指定します。現在2つのstashがあるかと思いますので、両方消しましょう。

```bash
git stash dropo 0
```

```bash
git stash drop 1
```
