Git PR

【git stash】間違えて別のブランチで開発を進めていた時の対処法

記事内に商品プロモーションを含む場合があります

とある機能の開発中のこと…

モリヤス

うぉ〜めっちゃうまくできた!

素敵なコードも書けたし、動きも問題なし!

テストも通る!!

ワイは天才か!!

モリヤス

よーーし!!

あとはコードチェックして

add commit

リモートにpushだ!!

モリヤス

そういえば今どこのブランチいるっけ?

git branch (パーン!!(Enter))

ターミナル

main

やで!!

モリヤス

m,m,m,main

だと!?

やってしまった( ; ; )

どのくらい変更したっけ?

git status(パーン!!(Enter))

ターミナル

変更ファイルが5つ

追加したファイルが4つ

やで!!

モリヤス

全部のファイルのコードを一旦適当なエディタにコピペして、git checkout .して、ブランチ切って…

モリヤス

くっそめんどいじゃん!!(# ゚Д゚)

※1人で開発しているといつもこんな感じです…

そんな直し方したら事故る可能性高いし、git使っているんだからもっとスマートに解決したいですよね?

素晴らしい方法!

ありました!!

前提

  • mainブランチで開発をしてしまったことに気づき、現状の修正や追加をそのまま別のブランチに移動させたい
  • コミットしていない状態である
  • 本来作業したいブランチは未作成

まずは、git statusをして現状のファイルの状態を確認しましょう。

Terminal
$git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   index.html

上記のように、既にステージングにある(git addした)場合は、git reset HEADでステージから取り消しておきましょう。

Terminal
$git reset HEAD
Unstaged changes after reset:
M	index.html

$git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

手順

1. git stash

Terminal
$git stash
Saved working directory and index state WIP on main: 6786e9f first commit

$git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

これで変更した

内容を一時的に退避できます。

git stashをした後、git statusを実行してみると変更がない状態になっています!

2. git checkout -b 新しいブランチ名

Terminal
$git checkout -b develop1
$git branch
* develop
  main

git checkout -b ブランチ名で新しいブランチを作成して移動することができます。

その後git branchを実行して、現在いるブランチを確認しましょう。

3. git stash apply

Terminal
$git stash apply
On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   index.html

git stash applyで先ほど一時退避した変更内容を反映できます。

これで解決です!d( ̄  ̄)

git stashは他にも便利な使い方があります!

ご自身でも調べてみてください!

終わりに

開発始める前にブランチやステータスの確認を忘れずにd( ̄  ̄)

モリヤス

なんなんだこの革新的な方法は!!

(大袈裟)

git stash

素晴らしい(゚∀゚ノノ”☆パチパチパチ

こうしてワイの心の平穏は保たれたのであった。

参考記事

[Git]誤ったブランチで実施した変更を正しいブランチに移動する

間違えて違うブランチで開発を始めてしまったときに、別のブランチに編集中のソースを移行する方法(git stash)

【git stash】コミットはせずに変更を退避したいとき