21

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

これらは私が得る画面です。ソース管理の状態でファイルを表示する

コミットしようとしたときのウィンドウ

エラーメッセージ

私に何ができる?プロジェクトは正常に実行されますが、ゲームのメイン メニューに本来あるべき画像 (彼が作業していたものと作業したクラス ファイル) が表示されていません。

4

6 に答える 6

19

これはよくあるイライラする状況です:

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

あなたの問題はすでに半分解決されているはずです。場合によっては、オーガナイザーからプルする必要があります。

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

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

注: git リポジトリから .DS_Stores を削除することを検討してください。

于 2012-05-24T13:12:12.837 に答える
4

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

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 で再度コミットできるようになります。

于 2012-05-13T02:28:32.810 に答える
2

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

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

于 2016-08-22T10:01:33.413 に答える
1

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

于 2012-06-16T22:32:44.247 に答える
0

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

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

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

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

私が今説明したことを超えて、どうやって私に尋ねないでください...そして、私が残したギャップを確実に埋めてください. 私はこれが初めてで、すべてを理解していません。たぶん、経験豊富なプログラマーなら、関係のない情報を関連する情報から切り離して、このテクニックをより明確に再現できるでしょう。

于 2016-01-08T20:33:52.990 に答える