The Git & Github Bootcamp: stash (セクション9/20)
`git stash`コマンドは、未コミットの変更を一時的に保存し、他のブランチに安全に切り替えるための便利なツールです。
`git stash pop`と`git stash apply`を使用して、スタッシュした変更を作業ディレクトリに再適用することができます。
実践的な演習を通じて、`git stash`を活用し、ワークフローの効率化を図ることができます。
Git & GitHubブートキャンプのセクション9では、実用的でありながら時には見落とされがちな`git stash`コマンドについて掘り下げます。このコマンドはすべての開発者が頻繁に使用するものではありませんが、その使い方と利用タイミングを理解することで、ワークフローをスムーズにし、不要なコミットを防ぐことができます。
Git Stashの必要性
プロジェクトを進めている途中で未コミットの変更があり、突然ブランチを切り替える必要が生じたとしましょう。コミットせずにこれらの変更をそのままにしておくと、新しいブランチに追随してしまったり、競合によってブランチの切り替えがブロックされたりします。ここで`git stash`が役立ちます。`git stash`は、コミットせずに現在の状態を保存しておくことで、他の作業を行うためのクリーンスレートを提供します。
Git Stashの基本
主に使用するコマンドは`git stash`、`git stash pop`、そして`git stash apply`です:
`git stash`: このコマンドは、未コミットの変更(ステージ済みとステージ前の両方)を一時的に保存し、作業ディレクトリを最後のコミット状態に戻します。これにより、変更を持ち越すことなく、競合を引き起こすことなくブランチを切り替えることができます。
`git stash pop`: これは、最新のスタッシュを取得し、作業ディレクトリに適用した後、そのスタッシュをスタッシュリストから削除します。
`git stash apply`: `pop`と似ていますが、スタッシュリストにスタッシュを残したまま変更を適用します。複数のブランチに同じ変更を適用する必要がある場合に便利です。
Git Stashを使用する理由
不要なコミットの回避: 変更がまだコミット準備が整っていない場合や、切り替えるブランチに関連しない場合、`git stash`を使用することで、履歴を混乱させずにこれらの変更を一時停止できます。
安全にブランチを切り替える: 未コミットの変更が別のブランチと競合する場合、Gitは切り替えを許可しません。スタッシュを使用すると、この問題をスムーズに回避できます。
柔軟なコラボレーション: チームメイトが他のブランチで助けを必要とする場合、現在の作業をスタッシュし、彼らをサポートした後、元のタスクに戻ることができます。
高度なスタッシュ技術
`git stash`と`git stash pop`は基本的な機能ですが、Gitはより高度なスタッシュオプションを提供しています:
`git stash list`: すべてのスタッシュエントリーをリスト表示し、複数のスタッシュを管理できます。
`git stash apply stash@{n}`: 特定のスタッシュエントリーを削除せずに適用します。
`git stash drop stash@{n}`: 特定のスタッシュエントリーを削除します。
`git stash clear`: すべてのスタッシュエントリーをクリアします。
実践演習: 日記のジレンマ
理解を深めるために、実践的な演習を進めましょう:
リポジトリの初期化: 新しいリポジトリを作成し、`diary.txt`というファイルを追加し、内容に「I love my boss」と記入します。これをmasterブランチにコミットします。
新しいブランチの作成: 新しいブランチ`the-truth`に切り替え、日記の内容を「I HATE MY BOSS」と5回繰り返して書き換えます。コミットはしません。
告白をスタッシュする: 上司が近づいてきたら、変更をスタッシュしてmasterに切り替えます。ファイルは「I love my boss」に戻ります。
カバーストーリーをコミット: masterブランチで「I love my boss」を追加してコミットします。
真実を取り戻す: `the-truth`ブランチに戻り、スタッシュをポップして変更を取り戻し、「I HATE MY BOSS」をコミットします。
結論
すべてのワークフローに必須ではありませんが、`git stash`をマスターすることで、Git操作に柔軟性と整然さが加わります。その機能を理解することで、未コミットの変更を効果的に管理し、リポジトリが整理され効率的であり続けるようにできます。未完成の機能を一時停止したり、一時的な実験を管理したりする際に、`git stash`はGitツールボックスにおける貴重なツールとなります。
この記事が気に入ったらサポートをしてみませんか?