Git のスタッシュ間で変更を移動する方法

GitBeginner
オンラインで実践に進む

はじめに

Git stash は、変更をコミットせずに一時的に保存できる便利な機能です。このチュートリアルでは、スタッシュした変更を別のスタッシュに移動する方法を学び、Git のワークフローをより効果的に管理する方法を紹介します。

Git Stash を理解する

Git Stash とは?

Git Stash は、Git に備え付けられた便利な機能で、変更をコミットせずに一時的に保存できます。これは、別のブランチに切り替えたり、リモートリポジトリから最新の変更をプルしたりする際に、現在のブランチで行った作業を失いたくない場合に特に役立ちます。

Git Stash を使うタイミング

以下のシチュエーションで Git Stash を使うことができます。

  • ブランチ切り替え時:まだコミットしたくないローカル変更がある状態で、別のブランチに切り替える場合。
  • 更新プル時:まだコミットしたくないローカル変更がある状態で、リモートリポジトリから最新の変更をプルする場合。
  • コード実験時:新機能を試したり、コードを実験したりしたいが、結果に満足するまで変更をコミットしたくない場合。

Git Stash の使い方

Git Stash を使うには、以下の手順に従います。

  1. 変更をスタッシュする:以下のコマンドを実行して、ローカル変更をスタッシュに保存します。
    git stash
  2. 別のブランチに切り替える:これで、別のブランチに切り替えたり、リモートリポジトリから最新の変更をプルすることができます。
  3. スタッシュした変更を復元する:以前の作業に戻りたいときは、以下のコマンドを使ってスタッシュした変更を適用します。
    git stash apply
    これにより、最新のスタッシュが現在のブランチに適用されます。

スタッシュ管理

Git Stash には、スタッシュした変更を管理するためのいくつかのコマンドが用意されています。

  • git stash list:作成したすべてのスタッシュを一覧表示します。
  • git stash show:特定のスタッシュで行われた変更を表示します。
  • git stash drop:一覧から特定のスタッシュを削除します。
  • git stash clear:一覧からすべてのスタッシュを削除します。

Git Stash の基本を理解することで、ローカル変更を効果的に管理し、作業を失うことなく異なるタスクやブランチ間を切り替えることができます。

スタッシュした変更の移動

スタッシュした変更を別のブランチに移動する

時には、スタッシュした変更を別のブランチに移動したい場合があります。これは、いくつかの変更をスタッシュしておいた後、それらの変更が別のブランチに適用されるべきであることに気付いたときに便利です。以下がその方法です。

  1. 変更をスタッシュする:
    git stash
  2. 対象のブランチに切り替える:
    git checkout target-branch
  3. スタッシュした変更を対象のブランチに適用する:
    git stash apply

これで、スタッシュした変更が対象のブランチに移動しました。

スタッシュした変更を複数のブランチに適用する

また、スタッシュした変更を複数のブランチに適用することもできます。いくつかの変更をいくつかのブランチに適用したい場合に便利です。

  1. 変更をスタッシュする:
    git stash
  2. スタッシュした変更を最初のブランチに適用する:
    git checkout branch1
    git stash apply
  3. スタッシュした変更を2番目のブランチに適用する:
    git checkout branch2
    git stash apply
  4. 変更を適用したい追加のブランチに対して、ステップ3を繰り返す。

コンフリクトがある場合のスタッシュした変更の移動

スタッシュした変更を別のブランチに適用する際にコンフリクトが発生した場合、手動で解決することができます。方法は以下の通りです。

  1. 変更をスタッシュする:
    git stash
  2. 対象のブランチに切り替える:
    git checkout target-branch
  3. スタッシュした変更を適用する:
    git stash apply
  4. 発生したコンフリクトを解決し、解決したファイルを追加する:
    git add resolved-file1 resolved-file2
  5. スタッシュ適用を続ける:
    git stash apply --continue

ブランチ間でスタッシュした変更を移動させる方法を理解することで、作業フローを効果的に管理し、変更が正しい場所に適用されることを確認することができます。

実践的なスタッシュ管理

スタッシュの命名と参照

変更をスタッシュするとき、Git は各スタッシュに一意の識別子を自動的に割り当てます。ただし、スタッシュをより分かりやすく追跡するために、独自の名前を付けることもできます。方法は以下の通りです。

git stash save "My feature changes"

その後、インデックスまたは割り当てたカスタム名でスタッシュを参照できます。

git stash apply stash@{2}
git stash apply "My feature changes"

スタッシュブランチ

Git Stash を使えば、スタッシュした変更から新しいブランチを作成することもできます。特定の一連の変更を独立して作業したい場合に便利です。方法は以下の通りです。

git stash branch new-feature

このコマンドは、new-feature という名前の新しいブランチを作成し、最新のスタッシュをそのブランチに適用します。

スタッシュのクリーンアップ

作業を進めるにつれて、スタッシュリストがすぐに混乱してしまうことがあります。スタッシュを整理するには、以下のコマンドを使えます。

git stash list  ## すべてのスタッシュを一覧表示
git stash drop stash@{0}  ## 最新のスタッシュを削除
git stash clear  ## すべてのスタッシュを削除

また、古いスタッシュを自動的に削除するように Git を設定することもできます。

git config --global stash.autoStash true
git config --global stash.maxStashSize 10

これらの設定により、マージやリベースの前に自動的に変更をスタッシュし、リストに最大10個のスタッシュを保持します。

これらの実践的なスタッシュ管理技術をマスターすることで、Git のワークフローを整理して効率的に保ち、変更を簡単にアクセスして管理できるようになります。

まとめ

このガイドを終えると、Git stash を十分に理解し、異なるスタッシュ間で効率的に変更を移動させることができるようになります。この知識は、クリーンで整理された Git リポジトリを維持するのに役立ち、共同作業、レビュー、およびプロジェクトのバージョン管理を行うのを容易にします。