【ツール活用|豆知識】Gitの作業を完璧にリセット!「git stash –include-untracked」で新規ファイルもまとめて退避する方法

導入: なぜこのコマンドが重要なのか

開発中に「急な割り込みタスクが入った」「今の変更を一旦脇に置いて別のブランチを確認したい」という場面は日常茶飯事です。そんな時に使うのが git stash ですが、実はデフォルトのコマンドでは「新規作成したファイル(Untracked files)」が退避されず、作業ディレクトリに残ってしまいます。この「残骸」が原因でブランチ切り替え時にコンフリクトを起こしたり、予期せぬ挙動を招いたりすることがあります。この課題を解決するのが –include-untracked オプションです。

基礎知識: Gitの管理状態とstashの仕組み

Gitの管理対象には、大きく分けて「追跡対象(Tracked)」と「未追跡(Untracked)」の2種類があります。
追跡対象は、一度でもgit addされたファイルのことです。
未追跡は、新しく作成され、まだgit addされていないファイルのことです。
通常の git stash は、追跡対象の変更のみを記録して作業ツリーをクリーンにします。しかし、–include-untracked(または -u)を付与することで、未追跡ファイルも一緒に退避させ、作業ディレクトリを「コミット直後のクリーンな状態」にリセットすることが可能になります。

実装/解決策: 基本的な使い方

作業ディレクトリを完全に綺麗にしたい場合、以下のコマンドを実行します。

git stash –include-untracked

これにより、編集中のファイルだけでなく、新しく作成したファイルもすべて「スタック」という一時保管場所に移動されます。これで安心して git checkout で別ブランチへ移動したり、git pull で最新の状態を取り込んだりできます。また、短縮形として git stash -u と記述することも可能です。

サンプルプログラム: 実践的な操作手順

以下に、新規ファイルを含めた退避から復元までの手順をコード形式で示します。

1. 現在の作業状態を確認(新規ファイルを作成したと仮定)
touch new_feature.py
echo “print(‘hello’)” > new_feature.py

2. 新規ファイルを含めてすべて退避させる
-u は –include-untracked の短縮形です
git stash -u -m “作業途中の変更と新規ファイルを退避”

3. この時点でディレクトリから new_feature.py が消え、クリーンになる
ls new_feature.py # エラーまたはファイルが見つからないことが確認できる

4. 必要な作業を終えた後、退避した内容を復元する
git stash pop

5. 再度ファイルが存在することを確認
cat new_feature.py # 内容が復元されていることが確認できる

応用・注意点: 現場で役立つアドバイス

注意点1:無視ファイルまで含まれる場合
.gitignore に登録されているファイルまで含めて退避させたい場合は、–all(または -a)オプションを使用します。ただし、ビルド成果物などを含めるとスタッシュが肥大化するため、基本は -u を使い分けるのがベストです。

注意点2:スタッシュの管理
git stash は便利な反面、溜め込みすぎるとどれが何の作業か分からなくなります。git stash list で内容を確認し、不要なものは git stash drop でこまめに削除する習慣をつけましょう。

このオプションを使いこなせば、作業の切り替えがよりスムーズになり、ヒューマンエラーを未然に防ぐことができます。ぜひ次の開発から活用してみてください。

コメント

タイトルとURLをコピーしました