T-CREATOR

開発時にで役立つgit stashコマンドの基本と応用テクニックを紹介

開発時にで役立つgit stashコマンドの基本と応用テクニックを紹介

変更を一時的に退避させたいとき、git stashは非常に便利なコマンドです。

例えば「今作業中だけど、急遽別のブランチでバグ修正しなきゃ…」というとき、作業内容をそのまま避けておけるのがgit stashの魅力です。

この記事では、初心者の方にもわかりやすく、基本の使い方から実践的な活用方法まで、具体例とともに丁寧に解説いたします。

あわせて、Git公式ドキュメントも適宜参照し、信頼性ある内容を心がけております。

一時退避の基本コマンド

作業中の変更を一時退避する

bashgit stash

このコマンドを実行すると、**ワークツリーの変更(追跡済みファイル)**が退避され、git statusはクリーンな状態になります。

bash$ git stash
Saved working directory and index state WIP on main: abc1234 コメントメッセージ

この状態で、他のブランチへ移動して作業することが可能です。

stashの一覧を確認する

bashgit stash list
bashstash@{0}: WIP on main: abc1234 コメント
stash@{1}: WIP on feature/foo: def5678 追加修正

それぞれのstashはstash@{N}という形で識別できます。

一時退避内容を元に戻す(apply・pop)

git stash apply

bashgit stash apply stash@{0}

このコマンドはstashされた変更をワークツリーに戻します。ただし、stash自体は削除されません

git stash pop

bashgit stash pop

applyと同じく変更を適用し、さらにstashを削除します。作業が戻ったことを確認しましょう。

退避時にメッセージをつける

bashgit stash save "フォームレイアウト作業中"

Git 2.15以降ではこの形式は非推奨です。代わりにpushを使います。

bashgit stash push -m "フォームレイアウト作業中"

特定のファイルだけをstashする

bashgit stash push -m "header部分のみ退避" header.tsx

必要なファイルだけを選んで退避することで、粒度の細かい管理ができます。

index(ステージング済み)も含めてstash

bashgit stash -k

もしくは

bashgit stash --keep-index

このオプションは、インデックスにある変更を保持し、ワーキングディレクトリだけをstashします。

ステージング済み変更も含めてstash(indexも含む)

bashgit stash -u

もしくは

bashgit stash push --include-untracked

-uは未追跡ファイル(untracked)も含めてstashします。

bashgit stash push -a

はすべてのファイル(ignored含む)を含めます。こちらは--allのショートカットです。

stashの内容を確認する

差分で確認

bashgit stash show stash@{0}
bashgit stash show -p stash@{0}

-pをつけることで、詳細なdiff表示が確認できます。

stashを削除する

特定のstashを削除

bashgit stash drop stash@{0}

全てのstashを削除

bashgit stash clear

うっかり消してしまわないように、内容確認してから実行するのが良いでしょう。

実戦的な活用パターン

パターン1:緊急で別ブランチに移動する必要がある

bashgit stash push -m "途中作業を一時退避"
git checkout hotfix/urgent-bug

パターン2:特定ファイルだけ退避して、残りを継続作業

bashgit stash push -m "CSSだけ退避" styles/global.css

stashを適用時にコンフリクトが発生したら?

通常のマージコンフリクト同様、手動で解決してコミットする必要があります。

bashgit status
# 両方の変更がある箇所が表示される

その後、以下のように対応します。

bash# コンフリクト解消後
git add .
git commit -m "stash適用時の競合を解消"

stashはブランチをまたいで使えるのか?

はい、stashはブランチに依存せず、どのブランチでも取り出すことができます。

bashgit stash
git checkout 別のブランチ
git stash pop

stashに名前をつけて管理する方法は?

残念ながら、stashは名前での管理は直接サポートされていません。

そのため、わかりやすいメッセージを使うことが重要です。

bashgit stash push -m "ログインフォーム改善"

stashをコミットとしてブランチ化する

bashgit stash branch fix-form stash@{0}

このコマンドで、stashの内容から新しいブランチを作成できます。

よくあるエラーと対処法

状況エラー例解決策
stashが適用できないconflictが発生するコンフリクトを手動で解消
stashが消えてしまったpop後に確認できないapplyを使うか、branchでブランチ化してから利用
退避したはずのファイルが戻らない-u-aを付け忘れ--include-untrackedで再度退避

よく使うstashコマンドまとめ

コマンド説明
git stash作業中の変更を一時退避
git stash push -m "メモ"メッセージ付きで退避
git stash liststashの一覧表示
git stash apply退避内容を戻す(削除しない)
git stash pop退避内容を戻して削除
git stash drop stash@{N}指定のstashを削除
git stash clear全てのstashを削除
git stash branch new-branch stash@{N}新ブランチ作成

まとめ

git stashは、中断と再開が多い開発現場において強力な味方です。

用途ごとに使い分ければ、作業の効率が飛躍的に向上します。

特に以下の使い方はおすすめです。

  • git stash push -m "作業内容"で意味のあるメモを残す
  • git stash branchで分岐作業をスムーズに
  • git stash show -pで内容確認してから適用

詳細はGit公式stashドキュメントもぜひご参照ください。

記事Article

もっと見る