Git 技術ログ

【Git】git stashコマンドの使い方と便利なTips

2023年5月30日

Gitは、バージョン管理システムとして広く使われており、開発者にとって不可欠なツールです。その中でも、git stashコマンドは非常に便利で、一時的に変更を退避するための機能を提供しています。この記事では、git stashコマンドの使い方と便利なTipsについて解説します。Gitの基本的な知識があることを前提に進めていきます。

基本的な使い方

git stashコマンドを使った変更の退避方法について解説します。

まず、git stash saveコマンドを使って変更をスタッシュに保存します。このコマンドは、スタッシュに一意の名前をつけることもできます。スタッシュには、変更内容やコミットメッセージも含まれます。

$ git stash save "Work in progress"

次に、git stash listコマンドを使用して、保存されたスタッシュの一覧を表示する方法を説明します。これにより、保存されたスタッシュの名前や変更内容を確認できます。

$ git stash list
stash@{0}: On master: Work in progress

スタッシュを復元する方法として、git stash applyおよびgit stash popコマンドを紹介します。git stash applyは、スタッシュを復元するだけで、スタッシュは削除されません。一方、git stash popはスタッシュを復元し、削除します。

stash@{0}の部分はgit stash listコマンドで番号を確認して適宜変更してください。

# applyの場合
$ git stash apply stash@{0}

# popの場合
$ git stash pop stash@{0}

スタッシュの管理と応用技

スタッシュの管理と応用技について解説します。

git stash branchコマンドを使って、スタッシュを新しいブランチに変換する方法を説明します。これにより、スタッシュを復元しながら新しいブランチで作業を続けることができます。

$ git stash branch new-branch-name stash@{0}

git stash dropコマンドを使って、不要なスタッシュを削除する方法を説明します。これにより、スタッシュの整理やメモリの解放が可能です。

$ git stash drop stash@{0}

さらに、複数のスタッシュを効果的に管理するためのTipsを提供します。スタッシュの名前付けや特定のスタッシュの適用など、より高度なスタッシュの操作方法も紹介します。

スタッシュのコンフリクトの解決

スタッシュを復元する際にコンフリクトが発生した場合は、以下の手順で解決することができます。

スタッシュの適用時にコンフリクトが発生した場合、まずはgit stash applyまたはgit stash popコマンドを実行します。

$ git stash apply stash@{0}

または

$ git stash pop stash@{0}

コンフリクトが発生したファイルをエディタやマージツールで開きます。コンフリクトの箇所は、以下のようなマークアップがされている場所です:

<<<<<<< Updated upstream
変更内容(スタッシュ適用前の内容)
=======
変更内容(スタッシュに保存された内容)
>>>>>>> Stashed changes

コンフリクトを解決します。競合する変更内容を適切に修正し、不要なマークアップを削除します。解決方法はプロジェクトや状況によって異なりますが、一般的には次のような手順を踏むことが多いです:

  • スタッシュに保存された変更を適用したい場合は、マークアップを削除し、変更内容を残します。
  • スタッシュ適用前の変更を保持したい場合は、マークアップを削除し、変更内容を修正します。
修正が完了したら、ファイルを保存します。

解決したコンフリクトをGitに伝えるために、git addコマンドを使用して修正されたファイルをステージングエリアに追加します。

$ git add <ファイル名>

または、修正されたすべてのファイルをステージングエリアに追加する場合は、以下のコマンドを使用します。ドット(.)を使った一括指定は、意図しないファイルを含める可能性もあるので注意が必要です。

$ git add .

ステージングエリアに追加した修正をコミットします。

$ git commit

コミットメッセージを入力し、コミットを作成します。

コミットが完了したら、スタッシュの復元作業を続行します。

スタッシュの適用を続ける場合は、再度git stash applyコマンドを実行します。

$ git stash apply stash@{0}

または、スタッシュを削除しながら適用する場合は、git stash popコマンドを使用します。

$ git stash pop stash@{0}

これで、スタッシュの復元時に発生したコンフリクトを解決し、変更を適用することができます。

よく使われるオプションの一覧

  • git stash save-uまたは--include-untrackedオプションは、未追跡ファイルもスタッシュに保存するために使用します。
  • git stash applyおよびgit stash pop--indexオプションは、スタッシュに含まれる変更をステージングエリアに適用します。これにより、スタッシュを復元した後に変更をステージングすることができます。
  • git stash branch: スタッシュを新しいブランチに変換する際に、ブランチ名を指定することができます。
  • git stash drop: 複数のスタッシュを一度に削除するために、複数のスタッシュ名を指定することができます。

注意点とベストプラクティス

git stashの使用に関する注意点やベストプラクティスについて提案します。

まず、git stashは一時的な退避手段であり、定期的なコミットやブランチの切り替えとは異なるものです。変更を一時的に保管するためのツールとして使われるべきです。

スタッシュには、一意の名前やメッセージを付けることができます。適切な名前やメッセージを付けることで、後からスタッシュを特定しやすくなります。

スタッシュはリポジトリに保存されるため、必要以上にスタッシュを作成するとリポジトリの容量が増える可能性があります。不要なスタッシュは削除してメモリを解放することをおすすめします。

また、スタッシュは個人の作業領域であり、他の開発者と共有することはできません。コミットやブランチを使用することで、より効果的なコードの共有とバージョン管理ができます。

まとめ

git stashコマンドは、開発者にとって非常に有用なツールです。この記事では、Git Stashコマンドの基本的な使い方から高度な技術まで、幅広い内容をカバーしました。Git Stashを活用することで、作業の一時的な退避やコンフリクトの解決をスムーズに行うことができます。適切に使用することで、Gitのパフォーマンスと効率性を向上させることができます。

  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-Git, 技術ログ