0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git管理のファイルのうちStageしていない変更を別ディレクトリに出力する

Posted at

VSCode に「未ステージの変更を別ディレクトリに書き出す」専用ボタンがないので、Gitコマンドでやります。
私はWindowsのTortoiseGitで生きてきた人間なのでGitコマンドをほとんど知りません。そのため、備忘録も兼ねてまとめます。Yay

ゴール

  • 対象:Gitで管理されているファイルのうち、Stageしていない変更分
    (=インデックスとワークツリーの差分 → git diff の対象)
  • やりたいこと:それらの 現在の内容を別フォルダにコピーして退避 する

手順(Linux/WSL 前提)

  1. リポジトリでターミナルを開く
    (カレントがプロジェクトルートになっていることを確認)

  2. 退避先ディレクトリを決めて作成
    例:プロジェクトの1つ上に backup_unstaged_YYYYMMDD を作る:

    DEST=../backup_unstaged_$(date +%Y%m%d_%H%M%S)
    mkdir -p "$DEST"
    
  3. 未ステージの変更ファイルの一覧を取得
    (tracked のみ・untracked は含めない)

    git diff --name-only > /tmp/unstaged_files.txt
    
  4. そのファイルだけを ディレクトリ構造ごとコピー

    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操作できるようになったらうれしいです。相当便利ですけどね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?