Gitで作業を進めているときに、別のブランチを確認したくなる場面は少なくありません。しかし、作業中の変更を残したくない場合、「stash」や「コミット」を使うのは面倒という方も多いでしょう。この記事では、変更を一切残さずに他のブランチを一時的にチェックアウトする方法を紹介します。
通常のチェックアウトではエラーになる理由
作業ディレクトリに変更がある状態で git checkout 別のブランチ を実行すると、以下のようなエラーが表示される場合があります。
error: Your local changes to the following files would be overwritten by checkout:
これは、現在の変更が他のブランチのファイルと競合するため、Gitが安全のためにチェックアウトを拒否している状態です。
stashを使わずに変更を破棄してチェックアウトする方法
作業中の変更を保存せずに破棄して別のブランチに移動したい場合は、以下の手順を踏むことで対応できます。
作業中の変更をすべて破棄する
以下のコマンドで、インデックスと作業ディレクトリの変更をすべて破棄します。変更内容は完全に失われるので注意が必要です。
git reset --hard
git clean -fd
git reset –hard:
インデックスと作業ディレクトリの変更を取り消す
git clean -fd:
未追跡のファイルやディレクトリを削除する
これでワーキングツリーが完全にクリーンな状態になります。
他のブランチへチェックアウト
状態がクリーンになったら、通常通りブランチを切り替えることができます。
git checkout ブランチ名
もしくはGit 2.23以降を使用している場合は、より推奨される以下のコマンドも使えます。
git switch ブランチ名
git restoreを使った部分的な破棄も可能
変更の一部だけを捨てて、他のブランチに切り替えたい場合は git restore を使うのもおすすめです。
git restore .
これはステージされていない変更のみを破棄するコマンドで、git reset よりも安全性の高い方法です。
一時的に他ブランチを確認するだけなら「作業ツリーの複製」も有効
もし、変更を破棄したくないけれど別ブランチを確認したいだけ、という場合には、別のディレクトリに同じリポジトリを複製するのも1つの手です。
git clone --local . ../clone-check
cd ../clone-check
git checkout ブランチ名
この方法なら、元の作業ディレクトリには影響を与えず、自由に他のブランチを確認できます。
まとめ
stashを使わずに変更を残さず他のブランチへ切り替えるには、git reset –hard と git clean -fd の組み合わせが有効です。ただし、変更内容はすべて消えてしまうため注意が必要です。
一時的な確認だけなら、作業ツリーを複製して別のディレクトリで作業する方法も安全でおすすめです。目的に応じて適切な方法を使い分けましょう。