Git Stash との差分比較のコード例解説
Git Stash との差分比較 (Git diff against a stash)
Git Stash は、現在の作業を一時的に保存して、別のブランチに切り替えたり、他の作業を行ったりするための機能です。この機能を使用すると、現在の作業状態を汚染することなく、他のタスクに集中することができます。
Git diff against a stash は、現在の作業状態と、最後に保存した Stash の内容との差分を表示するコマンドです。これにより、Stash に保存した内容から現在の作業状態がどのように変更されたかを確認することができます。
コマンドの使用法
git diff stash@{0}
stash@{0}
: 最後の Stash を指定します。他の Stash を指定する場合は、stash@{1}
、stash@{2}
などを使用します。
例
- 現在の作業を Stash に保存する:
git stash save "Temporary changes"
- 他のブランチに切り替える:
git checkout other-branch
- 現在の作業状態と Stash の内容との差分を表示する:
git diff stash@{0}
重要なポイント
- Stash は、一時的な保存場所であり、長期的な保存には適していません。必要に応じて、Stash の内容をコミットしてください。
- Stash の内容を削除する場合は、
git stash drop
を使用します。
Git Stash との差分比較のコード例解説
具体的なコード例と解説
Stash に作業を保存する
git stash save "一時保存: 機能Aの実装"
git stash save
: 現在の作業ツリーの変更を Stash に保存します。"一時保存: 機能Aの実装"
: このメッセージは任意で、Stash の内容を識別するための説明として使用されます。
別のブランチに切り替える
git checkout main
git checkout main
:main
ブランチに切り替えます。
Stash との差分を表示する
git diff stash@{0}
git diff
: 差分を表示するコマンドです。stash@{0}
: 最後の Stash を指します。stash@{1}
は一つ前の Stash、というように指定できます。
Stash を適用する(変更を戻す)
git stash apply
git stash apply
: Stash の内容を現在のブランチに適用します。
コード例の詳細な解説
git diff stash@{0}
の出力+
: Stash にはなかった新しい行-
: Stash にあったが削除された行~
: 内容が変更された行?
: ファイルモードが変更された行@
: 未追跡ファイル#
: 未ステージングの変更
具体的なユースケース
- 機能開発中の途中保存: 新しい機能の実装中に、別のバグ修正が必要になった場合に、現在の作業を Stash に保存し、バグ修正に取り掛かることができます。
- 実験的な変更: 新しいコードを試したいが、元のコードを壊したくない場合に、Stash を利用することで、安全に実験を行うことができます。
- レビュー前の確認: コードレビューの前に、自分の行った変更を Stash と比較し、不要な変更がないかを確認することができます。
- Stash の寿命: Stash は一時的な保存場所であり、不要になったら
git stash drop
で削除する必要があります。 - Stash の一覧表示:
git stash list
で、保存されている Stash の一覧を表示できます。 - Stash の適用:
git stash apply
で Stash を適用すると、Stash は削除されません。削除したい場合は、--keep
オプションをつけずに実行するか、git stash drop
を実行します。
Git Stash との差分比較は、Git を効果的に利用するために不可欠なスキルです。この機能を活用することで、開発作業をよりスムーズに進めることができます。
git stash
:man git-stash
git diff
:man git-diff
実践的な演習
- 新しいブランチを作成し、いくつかの変更を加えます。
- 変更を Stash に保存します。
- 別のブランチに切り替えて、さらに変更を加えます。
- Stash との差分を表示し、変更内容を確認します。
- Stash を適用して、変更を元に戻します。
上記の手順を繰り返すことで、Git Stash の使い方を習得することができます。
- より視覚的に差分を確認したい場合は、
git difftool
を使用することもできます。 - GUI の Git クライアントを使用すると、Stash の操作がより直感的に行える場合があります。
特定のファイルの差分を表示する
- コマンド:
git diff stash@{0} ファイル名
- 特定のファイルの変更点のみを確認したい場合に便利です。
差分を視覚的に確認する
- ツール:
- meld: 視覚的な差分表示ツール。行ごとの差分を色分けして表示し、マージも可能です。
- Kdiff3: 3つのファイルの差分を同時に表示できるツール。マージも可能です。
- vimdiff: Vim で差分を表示する。Vim の機能を活かして、細かい編集も可能です。
- コマンド例:
meld stash@{0}
差分を保存する
- コマンド:
git diff stash@{0} > diff.txt
- 差分をテキストファイルに保存することで、後からじっくりと確認したり、他のツールで解析したりできます。
複数の Stash との比較
- コマンド:
git diff stash@{0} stash@{1}
- 複数の Stash の内容を比較したい場合に便利です。
Stash の内容を一時的に作業ツリーに適用する
- コマンド:
git stash apply stash@{0}
- Stash の内容を作業ツリーに適用し、直接編集したい場合に便利です。ただし、この操作は元の Stash を変更しません。
Stash を別のブランチに適用する
- コマンド:
git stash branch new-branch stash@{0}
- Stash の内容を新しいブランチに適用し、別の作業を進めたい場合に便利です。
GUI ツールを利用する
- ツール:
- Sourcetree: 直感的な操作で Stash の管理や差分確認ができます。
- GitHub Desktop: GitHub と連携しやすく、視覚的な差分表示機能も充実しています。
- GitKraken: 多機能で、Git の様々な操作をGUIで行えます。
Git Stash との差分比較は、git diff stash@{0}
という基本的なコマンドだけでなく、様々な方法でより詳細な情報を得たり、作業効率を向上させることができます。
状況に応じて適切な方法を選択し、Git をより効果的に活用しましょう。
- Git のバージョンや設定によっては、上記のコマンドやツールの挙動が異なる場合があります。
git git-stash