TL;DR
ターミナルで競合解消
対象読者
ターミナル初心者
git初心者
Pullできねえ
Make sure a valid file exists in the repository and try again.
The source control operation failed because the file “####.swift” could not be found.
ってエラーが出ました。(Xcode 14.3)
XcodeのNavigator Area(画面左側のファイル一覧)では明らかにあるのに。(怒り)
どういう訳か、うまいことファイルが認識できていないようなので、ターミナルで確認してみます。
.git fileがあるフォルダまで移動する
%cd (DEMO.xcodeprojを内包するフォルダ)
git statusを確認。
% git status
rebase in progress; onto ハッシュ値
You are currently rebasing branch 'ブランチ名' on 'ハッシュ値'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both added: ####.swift
どうやら、競合が起きているようです。
(fix conflicts and then run "git rebase --continue")と言っているが競合は具体的にどう解消するんだ。
ChatGPT先生に聞くと
- コンフリクトしたファイルをテキストエディタで開きます。ファイル内には、コンフリクトのマーカーとして特殊な文字列(通常は<<<<<<<, =======, >>>>>>>)が表示されます。
- マーカーの上と下のコードブロックは、競合している変更内容です。適切な変更を選択し、コードを修正します。または、完全に新しいコードを記述することもできます。
- コードの修正が完了したら、修正したファイルを保存します。
- 修正したファイルをGitにステージングします。コマンドラインでgit add <ファイル名>を実行するか、GUIツールを使用して変更をステージングします。
- ステージングした修正をコミットします。コマンドラインでgit commitを実行するか、GUIツールを使用してコミットメッセージを入力します。
- コミットが完了したら、git rebase --continueコマンドを実行してリベースの継続を指示します。これにより、次のコンフリクトがある場合は同じ手順で解決できます。
なるほど。この説明の通り進めていくと、git commitで少しつまづいた。ターミナルの画面が普段と違う見た目、操作感になった。ChatGPT先生に聞いてみると、ターミナル内のエディタという概念があるらしい。
ターミナル内で使用されるエディタは、テキストベースの操作インタフェースを提供します。これにより、テキストファイルを表示し、編集し、保存することができます。いくつかの一般的なターミナルエディタには、Vim、Emacs、Nanoなどがあります。
多分今回起動したのはVimかな?Commit message を好きなものに書き換え、ESC キーを押してコマンドモードに移行し、:wqでエディタを終了できる。
あとは
git rebase --continue
で無事rebaseできた。
cf.