web-dev-qa-db-ja.com

失敗したXcodeGitマージがスタックしている

友人と1つのマスターブランチを持つgitベースのプロジェクトがあります。彼はいくつかのファイルにいくつかの変更を加えました。私は他のいくつかのファイルに変更を加えました。おそらく、同じファイルのいくつかに変更を加える可能性があります。彼はすべての変更をコミットしてレポにプッシュしました。それから私は行って自分の変更をコミットし、彼の変更をプルしようとしました。私はいくつかの競合を提示されましたが、それらは私が変更しなかったファイルであったため、彼の変更を支持してほとんど解決しました。次に、プッシュしようとすると、致命的でした。マージ中に部分的なコミットを実行できません。

これらは私が得る画面です。showing the files with source control status

The window when i try to commit

The error message

私に何ができる?プロジェクトは正常に実行されますが、ゲームのメインメニューに、他のいくつかの画像を除いて、彼が取り組んでいた画像と彼が取り組んだクラスファイルであるはずの画像が表示されない点が異なります。

20
marciokoko

Xcodeにはxcuserdataファイルに問題があり、変更を破棄して再コミットする必要がありました

1
marciokoko

これは一般的なイライラする状況です。

  1. ターミナルを開く
  2. プロジェクトリポジトリフォルダー(.git隠しファイルを含むフォルダー)に移動します
  3. mv .git/MERGE_HEAD .git/MERGE_HEAD_STUCKと入力してマージヘッドを脇に移動します

あなたの問題はすでに半分解決されているはずです、場合によってはあなたは主催者から引っ張る必要があります:

  1. オーガナイザーを開く-リポジトリ "ファイル>ソース管理>リポジトリ…"
  2. プロジェクトのリポジトリを見つけて、ここからpullを作成します。

その後、XcodeからGitを再び使用できるようになります。おそらく、いくつかのマージの競合を解決する必要がありますが、少なくともこれはXcodeの下にあり、ターミナルではありません。

注:考慮してください gitリポジトリから.DS_Storesを削除する

19
Flavien Volken

すべてのマージの競合が解決されるまで、コミットすることはできません。あなたが説明したことに基づいて、あなたが両方とも変更したファイルがあります。それらはあなたが解決しなければならない対立です。

Xcodeの競合を解決したことはありません。ターミナルアプリからいつでも競合を解決できます。ターミナルにアクセスし、Xcodeコマンドラインツールをインストールしたと仮定して、次のことを試してください。

git mergetool
git commit

これにより、編集内容を選択できるFileMergeウィンドウがポップアップ表示されます。ターミナルからのもう1つのオプションは、彼の変更を受け入れるだけで競合を解決することです。これはコードを壊しますが、戻って修正することができます。そのために:

git status
git checkout --theirs -- /path/to/a/conflicted/file ...
git add -- /path/to/a/conflicted/file ...
git commit

次に、ファイルを編集して機能を修正します。すべての競合が解決されると、Xcodeでコミットできるようになります。

4
GoZoner

ターミナルを開き、以下を利用します。

競合しているファイルを見つけるには:git status

マージして競合を修正するにはgit mergetool

追跡されていないファイルを追加する必要がある場合があります:git add .

最後に変更をコミットしますgit commit

3
Thafer Shahin

XCodeに問題がある場合は、AppCode(必要に応じて試用版)に戻し、最上位のプロジェクトフォルダーからコミットを実行します。

AppCodeはマージシナリオを検出し、部分マージの問題を整理します。同様に、AppCodeで分類できない場合は、Githubデスクトップを使用します。これがすべて失敗した場合にのみ、低レベルのコマンドに戻ります。

2
Ed Manners

Xcodeのソース管理のみを使用して、まったく異なるアプローチでこれを解決しました。

背景:別のチームが(Beanstalkを介して)リモートGitリポジトリに変更をプッシュしました。私の側では、.xcodeprojファイルは別のディレクトリにあり、変更は行われませんでした。後でコミットしようとすると、XcodeでTreeConflictエラーが発生しました。
ツリーの競合のスクリーンショット

Xcodeを使用して修正することはほぼ不可能であるため、.xcodeprojファイルをGitサーバーからダウンロードしたバージョンに置き換えました。結果... Xcodeプロジェクトはクリアされたように見えましたが、破損したプルからのすべての更新は、私が行った変更として表示され、コミットのためにステージングされました。 これらすべてのModと追加されたファイルを見てください しかし、コミットしようとすると、ここで説明する同じ「致命的:マージ中に部分的なコミットを実行できません」エラーが発生しました。

これが私が問題を解決した方法です...(今、私は新人プログラマーであることを理解しているので、理解が不足している可能性があります...しかし私の無知は私にこれを行う別の方法を見つけるように導きました。)セカンダリブランチに分岐し、そのブランチに切り替えます。次に、作業コピーを作成し、元のプロジェクトディレクトリの外にあるその作業コピーにディレクトリを配置しました。 (これが必要かどうかはわかりませんが、他のトラブルシューティング手法を読んだときに行ったことです。)次に、ブランチをマスターに切り替えました。そこで、ステージングされたファイル(コミットへの変更)がすべてなくなっていることに気付きました。すべてのファイルが相手によって行われた最新の変更に更新されたことを確認するために、ThirdBranchという新しいブランチを作成しました。これは、すべてのファイルを複製し、それをGitサーバーにプッシュして、Beanstalkにマスターブランチのサーバーバージョンを比較させました。プッシュしたばかりのThirdBrachブランチ(行ごと)で、相手によるすべての変更がXcodeに存在していました。これは、私のマスターリポジトリとGitマスターリポジトリが同じであることを意味し、Xcodeのみを使用して問題を解決したことを確認します。

私が今説明したことを超えて、どのように私に尋ねないでください...そして確かに私が省略したギャップを埋めます。私はこれが初めてで、すべてを理解しているわけではありません。経験豊富なプログラマーが、無関係な情報を関連する情報から分離して、この手法をより明確に再現できるかもしれません。これが、私がこれを投稿する理由の1つです。

0
Plexander