VSCode に「未ステージの変更を別ディレクトリに書き出す」専用ボタンがないので、Gitコマンドでやります。
私はWindowsのTortoiseGitで生きてきた人間なのでGitコマンドをほとんど知りません。そのため、備忘録も兼ねてまとめます。Yay
ゴール
- 対象:Gitで管理されているファイルのうち、Stageしていない変更分
(=インデックスとワークツリーの差分 →git diffの対象) - やりたいこと:それらの 現在の内容を別フォルダにコピーして退避 する
手順(Linux/WSL 前提)
-
リポジトリでターミナルを開く
(カレントがプロジェクトルートになっていることを確認) -
退避先ディレクトリを決めて作成
例:プロジェクトの1つ上にbackup_unstaged_YYYYMMDDを作る:DEST=../backup_unstaged_$(date +%Y%m%d_%H%M%S) mkdir -p "$DEST" -
未ステージの変更ファイルの一覧を取得
(tracked のみ・untracked は含めない)git diff --name-only > /tmp/unstaged_files.txt -
そのファイルだけを ディレクトリ構造ごとコピー
rsync -av --files-from=/tmp/unstaged_files.txt ./ "$DEST"/これで、
- 変更されているファイルだけ
- 元のフォルダ構成のまま
退避ディレクトリにコピーされる
- コマンドまとめ
DEST=../backup_unstaged_$(date +%Y%m%d_%H%M%S) mkdir -p "$DEST" git diff --name-only > /tmp/unstaged_files.txt rsync -av --files-from=/tmp/unstaged_files.txt ./ "$DEST"/
untracked(新規ファイル)も一緒に退避したい場合
tracked の未ステージ変更 + 新規ファイル を全部退避したいなら、
ファイルリストをまとめてからコピーします:
DEST=../backup_all_changes_$(date +%Y%m%d_%H%M%S)
mkdir -p "$DEST"
# 1) 未ステージ変更(tracked)
git diff --name-only > /tmp/changes.txt
# 2) untracked(.gitignore に引っかからない新規ファイルを追記)
git ls-files --others --exclude-standard >> /tmp/changes.txt
# 3) コピー
rsync -av --files-from=/tmp/changes.txt ./ "$DEST"/
まとめ
これで差分コードを退避させられます。VSCodeでももっと簡単にGit操作できるようになったらうれしいです。相当便利ですけどね。