Tips

作業中の変更を一時退避して作業効率アップ

作業中の変更を一時的に保存し、後で簡単に復元できるGitコマンドです。急なブランチ切り替えや、一時的に作業を中断して別のタスクに取り組む必要がある場合に非常に役立ちます。コミットするには早すぎるが、変更を破棄したくない時に大活躍します。

技術・言語・ツール: git stash

作業中の変更を一時的に保存し、後で簡単に復元できるGitコマンドです。急なブランチ切り替えや、一時的に作業を中断して別のタスクに取り組む必要がある場合に非常に役立ちます。コミットするには早すぎるが、変更を破棄したくない時に大活躍します。

作業中の変更を一時退避して作業効率アップ

git stashコマンドは、まだコミットしたくない作業中の変更(変更ファイルとステージングされた変更)を一時的に保存し、ワーキングディレクトリをクリーンな状態に戻します。これにより、現在のブランチで別の作業を行ったり、他のブランチに切り替えたりすることが容易になります。

コード例

現在の変更を退避する

# メッセージを付けて保存
git stash save "feature/new-designの作業途中"

# またはシンプルに
git stash

退避した変更の一覧を表示する

git stash list
# 例:
# stash@{0}: On master: feature/new-designの作業途中
# stash@{1}: WIP on develop: ...

最新の退避を適用する(ワーキングディレクトリに復元し、stashリストには残す)

git stash apply
# 特定のstashを適用する場合
git stash apply stash@{1}

最新の退避を適用し、stashリストから削除する

git stash pop
# 特定のstashをpopする場合
git stash pop stash@{1}

退避した変更の内容を確認する

git stash show
# 特定のstashの内容を確認する場合
git stash show stash@{1}
# 差分を詳しく表示する場合
git stash show -p stash@{0}

退避を削除する

# 最新のstashを削除
git stash drop

# 特定のstashを削除
git stash drop stash@{1}

# 全てのstashを削除(注意!)
git stash clear

退避した状態から新しいブランチを作成する

# stash@{0}の状態から新しいブランチを作成し、stashを削除
git stash branch new-feature-branch stash@{0}

注意点やおすすめポイント

  • メッセージの活用: git stash save "メッセージ" を使うと、後からどの作業を退避したのかが分かりやすくなります。
  • 未追跡ファイル (Untracked files): デフォルトでは未追跡ファイルはstashされません。これらも一緒に退避したい場合は git stash -u または git stash --include-untracked オプションを使用します。
  • ステージングエリアの変更: ステージングエリア(git addした変更)の変更も一緒にstashされますが、ステージングされた状態を保ちたい場合は git stash -i または git stash --index オプションを使います。
  • コンフリクト: git stash applygit stash pop を実行した際に、現在のワーキングディレクトリの内容と退避した変更が競合する場合、コンフリクトが発生することがあります。通常のGitマージと同様に解決してください。
  • ブランチの整合性: 可能であれば、stashしたブランチと同じブランチで apply または pop するのが最も安全です。異なるブランチで適用すると、意図しないコンフリクトや整合性の問題が発生する可能性があります。