【Git】ブランチを切り替え忘れて作業してしまった時の対処法

このエントリーをはてなブックマークに追加

Git管理されたプロジェクトを更新していてこんな経験はありませんか?

  • ブランチ切らずに作業してしまった!
  • 違うブランチにコミットしてしまった!

Git始めたての頃はよくやってました。最近でもたまにあります。

変更をしてしまった後でブランチを切り替えようとすると、場合によってはエラーが出て切り替えられない場合があります。

ブランチを切り替えつつ、変更内容も引き継ぎたい!

こんな時は次のコマンドを使います。

1
$ git stash

このコマンドを使うことで、コミットされていない変更内容を一時退避することができます。 この機能をスタッシュといいます。

これを利用して上記問題を解決してみましょう。

未コミットの変更を引き継ぎつつブランチを変更する

未コミットの場合は、以下の手順でコマンドを実行します。

1
2
3
$ git stash
$ git checkout <切り替えたいブランチ名>
$ git stash pop

$ git stash popは、直前に一時退避した変更内容を取り出すコマンドです。 変更を一時退避し、ブランチを切り替え、一時退避していた変更を取り出す、という流れです。 ただ、場合によってはコンフリクト(衝突)が発生する可能性があるので、それは自分で対処しましょう。

また、わざわざこの方法を取らなくても、

1
$ git checkout <切り替えたいブランチ名>

だけで変更内容も引き継げるケースもあります。 まずはチェックアウトを試みて、エラーが出たら上記3コマンドを実行しましょう。

コミット済みの変更を引き継ぎつつブランチを変更する

「間違えて違うブランチでコミットしてしまった!」といったケースの対処法です。 この対処法は色々あるのですが、ここではスタッシュを使って対処する方法を紹介します。

要は、未コミットの状態まで戻せれば、上で紹介した手順が踏めるわけです。

よって、以下のコマンドを実行します。

1
$ git reset --soft HEAD^

このコマンドは、最新のコミットを取り消して、未コミットの状態に戻すコマンドです。 ちなみに、--softは「変更内容は残す」という意味で、HEAD^は「直前のコミット」という意味です。 「コミットした」という事実を取り消すだけで、変更内容自体は未コミットの状態で残ります。 この状態に戻して、上記の未コミットの場合の手順を踏めばいいわけです。

簡単ですね(・∀・)

まとめ

この記事を通して何が言いたかったかというと、「スタッシュ便利だよ」ということですww

今回はブランチ切り替え時のスタッシュの有用性についてまとめました。 しかしそれ以外にもスタッシュは様々な場面で使えるので、スタッシュという機能があるということを覚えておくときっと役に立つはずです。

Comments