VSCodeでGit Stashを使う方法について

採用はこちら

VSCodeでは、Gitの「Stash(スタッシュ)」機能をGUIから利用できます。

Git Stashとは、現在作業している未コミットの変更を一時的に退避し、作業ツリーをきれいな状態に戻すための機能です。

たとえば、新機能を開発している途中で、急に別のブランチへ移動して不具合を修正しなければならなくなった場合に役立ちます。

作業途中の変更をわざわざコミットすることなく一時保存できるため、Gitを使った開発では非常に便利な機能です。

VSCodeでは、コマンドパレットやソース管理画面からGit Stashの作成・確認・復元・削除を行えます。

目次

Git Stashとは

Git Stashの「stash」には、「しまっておく」「隠しておく」といった意味があります。

Gitでファイルを編集すると、コミットするまでは変更内容が作業ツリーに残ります。

たとえば、feature/headerブランチでヘッダーを修正している途中に、mainブランチで緊急の不具合修正が必要になったとします。

変更内容によっては、そのまま別ブランチへ切り替えることができません。

そこでGit Stashを使用します。

基本的な流れは次のとおりです。

作業中のファイルを変更
↓
Git Stashで変更を一時退避
↓
作業ツリーをきれいな状態にする
↓
別のブランチへ移動
↓
別の作業を行う
↓
元のブランチへ戻る
↓
Stashを復元
↓
元の作業を再開

Git Stashは、あくまで作業途中の変更を一時的に避難させるための機能です。

長期間変更内容を保存する目的で使用するものではありません。

Git Stashが便利な場面

急に別のブランチで作業する必要があるとき

Git Stashが特に便利なのは、現在の作業を中断して別のブランチへ移動したい場合です。

たとえば、次のブランチで作業しているとします。

feature/header

しかし、mainブランチで緊急の修正が必要になったとします。

まだ現在の作業は完成していないため、コミットするには中途半端です。

このような場合は、ターミナルから次のように実行できます。

git stash push

変更を退避した後、別のブランチへ移動します。

git switch main

必要な作業を終えたら元のブランチへ戻ります。

git switch feature/header

最後に、Stashしていた変更を復元します。

git stash pop

これで、作業を中断する前の状態に近い形で開発を再開できます。

Pullする前に変更を一時退避したいとき

ローカルに未コミットの変更が残っている状態でgit pullすると、変更内容によってはGitが処理を拒否したり、競合が発生したりすることがあります。

そのような場合は、次のようにStashを利用できます。

git stash push
git pull
git stash pop

ただし、git stash popを実行した際に、取得した最新コードとStashした変更が競合する可能性があります。

Gitにはgit pull --autostashなどの方法もあるため、Stashを手動で使う方法は選択肢のひとつとして覚えておくとよいでしょう。

作業途中の内容をコミットしたくないとき

作業途中でもGitではコミットできます。

しかし、次のようなコミットを大量に作りたくないケースもあります。

WIP
作業途中
仮修正

一時的に変更を保存したいだけであれば、コミットではなくStashを利用すると履歴を汚さずに済みます。

ただし、作業内容を長期間保存したい場合は、Stashではなくブランチを作成してコミットするほうが安全です。

VSCodeでGit Stashを作成する方法

VSCodeでは、Gitコマンドを直接入力しなくてもStashを作成できます。

コマンドパレットからStashする

WindowsやLinuxでは、次のショートカットでコマンドパレットを開きます。

Ctrl + Shift + P

macOSでは次のキーを使用します。

Command + Shift + P

コマンドパレットが表示されたら、次のように検索します。

Git: Stash

表示されたGit: Stashを選択すると、現在の変更を一時退避できます。

VSCodeでは、主に次のStash関連コマンドを利用できます。

コマンド内容
Git: Stash追跡済みファイルの変更をStashする
Git: Stash (Include Untracked)未追跡ファイルも含めてStashする
Git: Stash Stagedステージ済みの変更をStashする

Git: Stash Stagedを利用するには、Git 2.35以降が必要です。

ソース管理画面からStashする

VSCodeでは、ソース管理画面からもGit Stashを利用できます。

左側のアクティビティバーから「ソース管理」を開きます。

WindowsやLinuxでは、次のショートカットでも開けます。

Ctrl + Shift + G

ソース管理パネル上部にある「…」メニューをクリックすると、Git関連の操作メニューが表示されます。

そこからStash関連の操作を選択できます。

通常のStashと未追跡ファイルを含むStashの違い

Git: Stashで退避できるファイル

通常のGit: Stashでは、基本的にGitがすでに追跡しているファイルの変更が対象になります。

たとえば、次の状態を考えます。

index.html       ← 既存ファイルを変更
style.css        ← 既存ファイルを変更
new-page.html    ← 新しく作成した未追跡ファイル

通常のStashでは、index.htmlとstyle.cssは退避されます。

一方、新しく作成したnew-page.htmlは未追跡ファイルなので、通常のStashでは作業ツリーに残ります。

未追跡ファイルもStashする

新しく作成したファイルも一緒に退避したい場合は、VSCodeで次のコマンドを使用します。

Git: Stash (Include Untracked)

ターミナルでは次のように実行できます。

git stash push -u

または、次の形式でも指定できます。

git stash push --include-untracked

-uを指定すると、追跡済みファイルの変更だけでなく、未追跡ファイルもStashできます。

Stashに名前を付ける方法

Stashを複数作成すると、どのStashにどの変更が保存されているのか分かりにくくなります。

そのため、Stashには分かりやすいメッセージを付けておくと便利です。

ターミナルでは次のように実行します。

git stash push -m "ヘッダー修正途中"

英語であれば、次のような名前でも構いません。

git stash push -m "header layout work"

Stashにメッセージを付けておけば、後からgit stash listを確認したときに内容を判別しやすくなります。

Stashの一覧を確認する方法

ターミナルでは、次のコマンドで保存されているStashを確認できます。

git stash list

たとえば、次のように表示されます。

stash@{0}: On feature/header: header editing
stash@{1}: On main: temporary bug fix
stash@{2}: On feature/login: login form

最新のStashがstash@{0}です。

そのひとつ前がstash@{1}、さらにその前がstash@{2}となります。

VSCodeでは、コマンドパレットから次のコマンドを利用できます。

Git: View Stash

Stashを選択すると、保存されている変更内容を確認できます。

Stashの変更内容を確認する方法

変更概要を確認する

ターミナルでは、次のコマンドを使用できます。

git stash show stash@{0}

これにより、Stashに含まれる変更の概要を確認できます。

詳しい差分を確認する

詳細な差分を表示する場合は、-pオプションを使用します。

git stash show -p stash@{0}

-pはパッチ形式で変更内容を表示するオプションです。

未追跡ファイルも含めて確認する

git stash push -uで未追跡ファイルもStashしている場合は、必要に応じて次のように確認できます。

git stash show -u -p stash@{0}

-uを付けることで、Stashに含まれている未追跡ファイルも確認できます。

Stashを復元する方法

VSCodeでStashを復元する方法には、主に「Apply」と「Pop」があります。

両者は似ていますが、Stashを復元した後の扱いが異なります。

Git: Apply Stashとは

VSCodeのコマンドパレットから次のコマンドを実行します。

Git: Apply Stash...

Applyでは、Stashした変更を現在の作業ツリーへ復元します。

ただし、復元後も元のStashは削除されません。

イメージすると次のようになります。

Stash
↓
Apply
↓
変更を復元
↓
Stashは残る

ターミナルでは次のコマンドを使用します。

git stash apply

特定のStashを指定する場合は次のようにします。

git stash apply stash@{1}

復元後の状態を確認してからStashを削除したい場合に適した方法です。

Git: Pop Stashとは

VSCodeでは次のコマンドを使用します。

Git: Pop Stash...

PopはStashの変更を復元し、正常に適用できた場合は、そのStashをStash一覧から取り除きます。

イメージすると次のようになります。

Stash
↓
Pop
↓
変更を復元
↓
正常に適用できればStashを削除

ターミナルでは次のコマンドを使用します。

git stash pop

特定のStashなら次のように指定できます。

git stash pop stash@{1}

ただし、競合が発生して正常に適用できなかった場合、Stashは自動的に削除されません。

ApplyとPopの違い

ApplyとPopの違いを整理すると次のようになります。

操作変更を復元Stashを残す
Apply○○
Pop○正常適用時は削除
Drop×削除

Git Stashに慣れていない場合は、Applyで復元した後に問題がないことを確認し、最後にDropする方法が分かりやすいでしょう。

最新のStashを復元する方法

VSCodeには、最新のStashだけをすぐに復元するコマンドも用意されています。

Git: Apply Latest Stash

または、次のコマンドを使用します。

Git: Pop Latest Stash

複数のStashから選ぶ必要がなく、直前にStashした作業をすぐ元に戻したい場合に便利です。

Stashを削除する方法

不要になったStashは削除できます。

特定のStashを削除する

VSCodeでは次のコマンドを使用します。

Git: Drop Stash...

ターミナルでは次のようにします。

git stash drop stash@{0}

すべてのStashを削除する

VSCodeでは次のコマンドを使用できます。

Git: Drop All Stashes...

ターミナルでは次のコマンドです。

git stash clear

dropやclearで削除したStashは簡単に元へ戻せません。

必要な変更が残っていないことを確認してから実行することが重要です。

VSCodeのターミナルからGit Stashを使う方法

VSCodeではGUIだけでなく、統合ターミナルからGitコマンドを直接実行できます。

メニューから「ターミナル」→「新しいターミナル」を選択します。

WindowsやLinuxでは、一般的に次のショートカットでも開けます。

Ctrl + `

変更をStashする

基本的なコマンドは次のとおりです。

git stash push

引数を付けない次のコマンドも使用できます。

git stash

現在のGitでは、引数なしのgit stashは基本的にgit stash pushと同様の操作として利用できます。

名前を付けてStashする

git stash push -m "作業内容"

未追跡ファイルもStashする

git stash push -u

ignoredファイルも含める

git stash push -a

-aまたは--allを使用すると、未追跡ファイルだけでなく、Gitから無視されているファイルもStash対象になります。

たとえば、.gitignoreに登録されている次のようなファイルやディレクトリです。

node_modules/
.env
dist/
キャッシュファイル

ただし、プロジェクトによっては大量のファイルや機密情報を含むファイルまでStashされる可能性があります。

-aは必要性を確認したうえで使用するとよいでしょう。

一部の変更だけStashする方法

ファイル内の変更をすべてStashするのではなく、一部分だけを選択してStashしたい場合があります。

その場合は次のコマンドを使用します。

git stash push -p

-pは--patchの省略形です。

Gitが変更単位である「hunk」ごとに、Stashするかどうかを確認します。

たとえば、同じファイルに複数の変更がある場合でも、必要な変更だけをStashできます。

ステージ済みの変更だけStashする方法

ステージ済みの変更だけをStashしたい場合は、次のコマンドを使用します。

git stash push --staged

短縮形では次のようにも指定できます。

git stash push -S

VSCodeでは、次のコマンドが対応しています。

Git: Stash Staged

このVSCode機能を利用するにはGit 2.35以降が必要です。

たとえば、次のようにindex.htmlだけをステージしたとします。

git add index.html

その後、次のコマンドを実行します。

git stash push --staged

これにより、ステージ済みの変更をStashできます。

ステージ済みの変更を現在の作業状態に残す方法

ステージ済みの変更を現在の作業状態に残し、それ以外の変更を作業ツリーから退避したい場合は、--keep-indexを利用できます。

git stash push --keep-index

イメージすると次のようになります。

ステージ済みの変更
→ 現在の作業状態に残す

その他の対象となる変更
→ 作業ツリーから退避

--keep-indexは、「ステージ済みの変更をStashの記録そのものから必ず除外する」という意味ではありません。

ステージ済みの状態を現在のインデックスおよび作業ツリー側に保持するためのオプションと理解するとよいでしょう。

複数の変更を整理しながらコミットしたい場合などに便利です。

Stashから新しいブランチを作成する方法

古いStashを現在のブランチへ適用すると、ブランチの状態が大きく変わっているために多数のコンフリクトが発生することがあります。

そのような場合は、git stash branchを利用できます。

git stash branch feature/restore-work stash@{0}

このコマンドを実行すると、GitはStashを作成した時点のコミットを基準として新しいブランチを作成します。

その後、新しいブランチへ切り替えてStashの変更を適用します。

現在のブランチへ直接古いStashを適用するよりも、競合を避けやすい場合があります。

なお、Stashの適用に成功すると、使用したStashはStash一覧から取り除かれます。

そのため、Stashを残したまま試したい場合は通常のgit stash applyとの違いに注意しましょう。

Stashを復元したときにコンフリクトした場合

Stashは常に問題なく復元できるとは限りません。

たとえば、Stash側と現在のブランチ側で同じファイルの同じ部分を変更している場合、コンフリクトが発生する可能性があります。

Stash側
index.htmlの同じ箇所を変更

現在のブランチ側
index.htmlの同じ箇所を別の内容に変更

この状態でgit stash popやgit stash applyを実行すると、競合が発生する可能性があります。

VSCodeでは、競合したファイルがソース管理画面に表示されます。

競合部分を確認し、必要なコードを残すように修正します。

競合を解消した後は、通常のGit操作と同様にファイルをステージして作業を続けます。

git stash popで競合が発生した場合は、対象のStashが自動削除されずに残ることがあります。

作業が完了してStashが不要になったら、必要に応じて次のコマンドで削除します。

git stash drop stash@{0}

VSCodeでGit Stashを使う基本的な流れ

VSCodeでGit Stashを使う場合は、次の流れを覚えておくと実務で使いやすくなります。

1.ファイルを編集する

たとえば、feature/headerブランチで作業します。

feature/header

index.htmlやstyle.cssなどを編集します。

2.変更をStashする

コマンドパレットを開きます。

Ctrl + Shift + P

次のコマンドを実行します。

Git: Stash

新規作成した未追跡ファイルも退避する場合は、次のコマンドを使用します。

Git: Stash (Include Untracked)

3.別のブランチへ移動する

たとえば、mainブランチへ切り替えます。

4.別の作業を完了する

必要な修正を行い、コミットします。

5.元のブランチへ戻る

再びfeature/headerブランチへ戻ります。

6.Stashを復元する

安全性を重視するなら、まず次のコマンドを利用します。

Git: Apply Stash...

変更が正しく復元されたことを確認します。

問題がなければ、不要になったStashを削除します。

Git: Drop Stash...

Stashの復元と削除を一度に行いたい場合は、次のコマンドでも構いません。

Git: Pop Stash...

Git Stashでよく使うコマンド一覧

Git Stashでよく使用するコマンドをまとめると、次のようになります。

# 変更をStashする
git stash push

# 名前を付けてStashする
git stash push -m "作業内容"

# 未追跡ファイルもStashする
git stash push -u

# ignoredファイルも含める
git stash push -a

# Stash一覧を確認する
git stash list

# Stashの概要を確認する
git stash show stash@{0}

# 詳細な差分を確認する
git stash show -p stash@{0}

# 未追跡ファイルも含めて差分を確認する
git stash show -u -p stash@{0}

# Stashを復元して残す
git stash apply stash@{0}

# Stashを復元し、成功時に削除する
git stash pop stash@{0}

# 特定のStashを削除する
git stash drop stash@{0}

# すべてのStashを削除する
git stash clear

# 変更の一部だけStashする
git stash push -p

# ステージ済みの変更をStashする
git stash push --staged

# ステージ済みの変更を現在の作業状態に残す
git stash push --keep-index

# Stashを基に新しいブランチを作成する
git stash branch new-branch stash@{0}

Git Stashを使うときの注意点

Stashはコミットの代わりではない

Stashは、あくまで一時的に変更を退避するための機能です。

重要な変更を長期間Stashだけに保存しておく使い方はおすすめできません。

長期間保持する必要がある変更は、専用のブランチを作成してコミットしたほうが安全です。

未追跡ファイルが含まれるか確認する

通常のStashでは、未追跡ファイルは対象になりません。

新しく作成したファイルもまとめて退避する場合は、VSCodeで次のコマンドを使用します。

Git: Stash (Include Untracked)

ターミナルの場合は次のコマンドです。

git stash push -u

作業中に新しいファイルを多数作成している場合は、特に注意しましょう。

ApplyとPopの違いを理解する

ApplyとPopは似ていますが、Stashを残すかどうかが異なります。

ApplyではStashが残ります。

Popでは、正常に復元できた場合にStashが削除されます。

Git Stashに慣れていない場合は、次の流れにすると確認しながら作業できます。

Stash
↓
Apply
↓
変更内容を確認
↓
問題なければDrop

Stashは通常のgit pushでは共有されない

Stashは通常、ローカルリポジトリ内で管理されます。

通常のブランチやコミットのように、git pushを実行しただけでGitHubやGitLabへ自動的に共有されるわけではありません。

そのため、パソコンの故障やリポジトリの削除などが発生すると、Stashした作業を失う可能性があります。

重要な変更はStashだけに依存せず、コミットやバックアップを利用したほうが安全です。

なお、現在のGitにはStashをexport・importする高度な仕組みもありますが、通常の開発ではStashはローカルの一時保存として考えておけば問題ありません。

Git StashとGit Worktreeの使い分け

別ブランチへ一時的に移動するだけなら、Git Stashは非常に便利です。

しかし、複数のブランチを同時に開発したい場合は、Git Worktreeのほうが適しているケースがあります。

Git Worktreeを利用すると、ひとつのGitリポジトリに対して複数の作業ディレクトリを用意できます。

そのため、現在の変更をStashせずに別ブランチを別フォルダで開くことができます。

たとえば、次のような使い分けが考えられます。

一時的に別ブランチへ移動したい
→ Git Stash

複数のブランチを並行して継続的に開発したい
→ Git Worktree

頻繁にStashとPopを繰り返している場合は、Worktreeの利用も検討するとよいでしょう。

VSCodeでGit Stashを使うときに覚えておきたいポイント

VSCodeでは、Git StashをGUIから簡単に操作できます。

特に覚えておきたいコマンドは次のとおりです。

Git: Stash
→ 追跡済みファイルの変更を一時退避

Git: Stash (Include Untracked)
→ 未追跡ファイルも含めて一時退避

Git: Stash Staged
→ ステージ済みの変更をStash

Git: View Stash
→ Stashの内容を確認

Git: Apply Stash...
→ 変更を復元し、Stashを残す

Git: Pop Stash...
→ 変更を復元し、正常適用時にStashを削除

Git: Drop Stash...
→ Stashを削除

Git Stashを使えば、未完成の作業をコミットすることなく一時的に退避できます。

特に、急に別ブランチへ移動する必要が出た場合や、Pull前に現在の変更を避けたい場合に便利です。

初心者の場合は、まず「Stashで退避する → 別作業を行う → 元のブランチへ戻る → Applyで復元する → 問題なければDropする」という流れを覚えるとよいでしょう。

Git Stashの仕組みとApply・Popの違いを理解しておけば、VSCodeを使ったGit作業をより安全かつ効率的に進められます。

以上、VSCodeでGit Stashを使う方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次