Xcodeで間違えてブランチを作ってしまったり、管理対象外にしたいファイルがあるときの対処方法

Xcodeのrepositoryでブランチを作成する時にブランチ元を間違えて指定してしまってコンフリクトが起こりまくってしまったので対処しました。

状況

直前のversion1.2を元にversion1.4を作るところを、masterを元にversion1.4を作ってしまいました。

ブランチ一覧

その結果、こんなふうにコンフリクトがでまくってしまいました。

コンフリクト発生

コンフリクトマークは”C”です。

コンフリクトマーク

間違ってブランチを作っただけなので、強制的に全て解決済にします。

■ File > Source Control > Mark as Resolved

コンフリクトを強制解決

これで全てのコンフリクトが解決すれば ブランチを変更して間違って作成したブランチを削除できます。しかし、今回はXcodeのファイルナビゲータから見えないXcodeの状態管理ファイルがgitの管理対象になってしまっていてそのファイルのコンフリクトがどうしてもXcode上から解決できなかったのでターミナルで対処しました。

今回使ったgitコマンド

  • git status
現在の状態を表示
  • git commit -m ‘コミット時のコメント’
コミット
  • git branch
現在のブランチを表示
  • git checkout ブランチ名
ブランチの変更
  • git add -u
コンフリクトしているファイルのマージ
  • git rm -r –-cached ファイル名
管理対象外にする

ブランチの変更

ターミナルからブランチを変更してもXcodeのオーガナイザで操作した時と同じ”error: you need to resolve your current index first“というエラーがでました。そこで強制的にマージしてブランチを変更しました。

実施例)

#現在のブランチを確認
$ git branch
 master
 version1.01
 version1.1
* version1.2
 version1.4

#version1.4ブランチに変更
$ git checkout version1.4
PasteShogiban.xcodeproj/project.xcworkspace/xcuserdata/tak.xcuserdatad/UserInterfaceState.xcuserstate: needs merge
PasteShogiban.xcodeproj/xcuserdata/tak.xcuserdatad/xcschemes/PasteShogiban.xcscheme: needs merge
error: you need to resolve your current index first

#強制的にマージ
$ git add -u

#再度version1.4ブランチに変更
$ git checkout version1.4
M PasteShogiban.xcodeproj/project.xcworkspace/xcuserdata/tak.xcuserdatad/UserInterfaceState.xcuserstate
Switched to branch 'version1.4'

#現在のブランチを確認
$ git branch
 master
 version1.01
 version1.1
 version1.2
* version1.4

ファイルを管理対象外にする方法

  • 対象外一覧のファイルに登録
  • 既に管理対象になってしまったいるファイルを削除

対象外一覧のファイルに登録

対象外一覧ファイル:.gitignore

git 管理しているプロジェクトのトップフォルダに上記のファイルを作成する

作成例)

$ echo PasteShogiban.xcodeproj/〜省略〜/UserInterfaceState.xcuserstate > .gitignore

既に管理対象になってしまっているファイルを除外

コマンド:git rm -r --cached ファイル名

実施例)

$ git rm -r --cached PasteShogiban.xcodeproj/project.xcworkspace/xcuserdata/tak.xcuserdatad/UserInterfaceState.xcuserstate
rm 'PasteShogiban.xcodeproj/project.xcworkspace/xcuserdata/tak.xcuserdatad/UserInterfaceState.xcuserstate'

$ git status
# On branch version1.4
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# deleted: PasteShogiban.xcodeproj/project.xcworkspace/xcuserdata/tak.xcuserdatad/UserInterfaceState.xcuserstate
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# .DS_Store
# .gitignore

$ git commit -m 'ignore status file' #除外操作をコミット
[version1.4 2737034] ignore status file
 1 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 PasteShogiban.xcodeproj/project.xcworkspace/xcuserdata/tak.xcuserdatad/UserInterfaceState.xcuserstate

関連記事