概要
git branchの超基本的な理解とgit checkoutができない場合のエラー解決法について書いています。
エラー内容
$ git checkout [移動先のブランチ名]
でgit branchを移動しようとした際にエラーが発生。
error: Your local changes to the following files would be overwritten by checkout:
ファイル名
Please, commit your changes or stash them before you can switch branches.
error: The following untracked working tree files would be overwritten by checkout:
ファイル名
Please move or remove them before you can switch branches.
Aborting
ワーキングツリーに知らないファイルがあるので、コミットかスタッシュしてからブランチ移動しろとのこと。
原因確認
エラー発生時のgit branchの状況は以下。
master
step4
* step5
step4で実装した機能をプルリクしている状況の中で
step5のブランチを切って進めている時。
確認してみるとstep5にいる時のファイルがstep4の時のファイル内容と異なっている。
さらに、masterには移動ができる状態だったのでstep4→step5ではなく、master→step5とブランチを切ってしまっているなと気づきブランチの派生状況を確認するため以下で今のブランチの派生元ブランチを特定。
$ git show-branch
* [master] Merge pull request #3 from ktanizaw/step3
! [step4] add:管理画面アクセス制限、削除制限
! [step5] Merge pull request #3 from ktanizaw/step3
---
+ [step4] add:管理画面アクセス制限、削除制限
+ [step4^] add:ユーザー管理画面
+ [step4~2] add:ログイン時のユーザー機能制御
+ [step4~3] add:ユーザー作成タスク詳細画面
+ [step4~4] add:管理者画面、ユーザー一覧、削除、編集、作成
+ [step4~5] add:ログイン・ログアウト機能
+ [step4~6] add:ログイン・ログアウト機能
+ [step4~7] add:seedデータ、アソシエーション
--- [master] Merge pull request #3 from ktanizaw/step3
*
が現在のブランチ。
!
がその他のブランチ。
ブランチの右には最新コミットが表示されている。
masterとstep5の最新コミットが同じということで、
やはりmasterからstep5のブランチを作成していた。
---
以下についている+
はコミット内容で、インデントが揃っているブランチに対してのコミット。
今回はstep4にのみコミットしていたので全てstep4のインデントと同じになっている。
解決方法
step5の内容をstep4と同じにしてからコード追加をしたいだけだったため、
間違えて作成したstep5のブランチを削除することに。
移動ができない原因の不要なファイルを削除して、masterに移動してstep5を削除していきます。
$ git status
でファイルの状況を確認し、赤文字の中にある
Changes not staged for commit:
のファイルは以下で削除。
$ git checkout file_name #特定のファイル
$ git checkout . #すべて
Untracked files:
のファイルは以下で削除。
$ git clean -f
$ git branch -d [ブランチ名]
これでスッキリして、新しく正しい位置からブランチを作成できました。
参考
https://qiita.com/konweb/items/061475d6376db957b3c4
https://qiita.com/hogeta_/items/33d2334c9b1919bd5120