Eclipse v4. (Kepler)でEGitを使用しています。変更をコミットしてプッシュしたい。最初にプルを実行すると、1つのファイルが競合しています。競合を手動で解決した後(ローカルとリモートは同じになりました)、まだ問題が発生しています。
各アクションのエラーメッセージは次のとおりです。
アップストリームにプッシュ
マスター:マスター[拒否-早送りなし]
引く
状態がMERGING_RESOLVEDのリポジトリにプルできません
マージ済みとしてマーク
インデックスへのリソースの追加に失敗しましたインデックスへのリソースの追加に失敗しましたaddコマンドの実行中に例外がキャッチされました
ハードリセット
「refs/heads/masterへのリセット」中に内部エラーが発生しました。リセットコマンドの実行中に例外がキャッチされました。 {0}
競合を削除して変更をプッシュするにはどうすればよいですか?私は何を間違えていますか?
チーム同期ビューを使用していますか?もしそうならそれは問題です。 Team Synchronizeビューでの競合解決は、EGitでは機能しません。代わりに、Gitリポジトリビューを使用する必要があります。
Gitパースペクティブを開きます。 Gitリポジトリビューで、Branches→Local→masterに移動します右クリック→Merge...
Remote Tracking→Origin/master
を自動選択する必要があります。押す Merge。
result:conflict
と表示されるはずです。
競合するファイルを開きます。ファイルに古いsk000l >>>> ===== <<<<スタイルマージの競合があるはずです。ファイルを編集して競合を解決し、保存します。
これで、「Gitステージング」ビューの「ステージングされていない変更」に変更されたファイルが表示されます。右クリックして「インデックスに追加」
残りのファイルについて繰り返します。
「gitステージング」ビューから、コミットしてプッシュします。 Git/Eclipseは、リモートのOriginの変更をマスターにマージしたことを知っているため、非早送りエラーを回避する必要があります。
また、EGitでマージの競合を解決することは混乱を招きます。共有リポジトリにいくつかの変更をコミットする準備ができたら、私が学んだ手順は次のとおりです。
このガイドは役に立ちました http://wiki.Eclipse.org/EGit/User_Guide#Resolving_a_merge_conflict 。
更新された私の手順についてのメモだけで、これは私が進める方法です:
場合によっては危険ですが、Git ExtensionやSource Treeなどの外部ツールの使用を避けることは非常に便利です
私はこれが古い投稿であることを知っていますが、同様の問題に見舞われ、それを解決することができたので、共有したいと思いました。
(更新:以下のコメントに記載されているように、この回答はeGitに「git stash」機能を含める前でした。)
私がしたことは:
それが役に立てば幸いです。
競合するファイルを右クリックし、競合を解決してからインデックスに追加します。
これは私たちが頻繁に直面する問題であるため、以下にそれを解決する手順を示します。
Gitパースペクティブを開きます。 Gitリポジトリビューで、ブランチ→ローカル→マスターに移動し、右クリック→マージ ...
自動選択リモートトラッキング→* Origin/master。押す Merge。
Eclipseでステージビューを起動します。
最初に競合を示したファイルをダブルクリックします
競合のマージビューで、すべての非競合+競合の変更に対して左から右へ左矢印を選択すると、すべての競合を解決できます。
マージされたファイルを保存します。
チームを行う→Eclipseから再度プルします。
準備万端です :)
Eclipseで(ステージングビューを介して)競合を解決する以前のプロセスは、数年前よりずっと直感的に見えたので、ツールが以前のように機能しなくなったか、内部のマージ競合を解決するプロセスを覚えています- SVNリポジトリ。とにかく、競合するファイルを右クリックすると、この気の利いた「マージ済みとしてマーク」メニューオプションがありました。
2019年に早送りして、Eclipse(v4.11)の「Git Staging」ビューを使用しています。実際、私はSTS(Spring Tool Suite 3.9.8)を使用していますが、Git StagingビューはJava/Springベースのプロジェクトを操作するための標準のEclipseプラグインだと思います。私が他の人に役立つ場合と、GITコマンドラインからマージの競合を解決するために、次のアプローチを共有します。 ;-)
今思い出した機能はなくなっているため(または、現在のバージョンのGITとEclipseで異なる方法で実行される可能性があるため)、GITリポジトリを使用してEclipseを介してマージの競合を解決するための現在の手順を次に示します。それは私にとって最も直感的なようです。明らかに、ここでの応答の数から、マージの競合を解決する方法はmanyあることが明らかです。多分、3者間マージツールを使用してJetBrains IntelliJに切り替える必要があるだけです。
注:メニューオプションは直感的ではないため、多くのことが誤解を招く可能性があります。たとえば、更新をローカルに保存し、競合するファイルを再度開いて、行った変更が保持されていることを確認しようとすると、変更ではなく元の競合状態が開かれるため混乱が生じる可能性があります。
ただし、インデックスにファイルを追加すると、そこに変更が表示されます。
また、マージの競合を引き起こす変更を取り込む場合は、最初にローカルの変更を「隠して」から、再度変更を取り込むことをお勧めします。少なくともGITでは、保護として、変更を元に戻すかスタッシュするまで、外部の変更を取り込むことはできません。変更が重要でない場合は、破棄してHEAD状態に戻しますが、そうでない場合は隠しておきます。
最後に、1つまたは2つのファイルのみを変更する場合は、それらを参照として個別のテキストファイルにプルし、HEADに戻してから、変更をプルするときにファイルを手動で更新することを検討してください。
このアプローチは「スタッシュ」ソリューションに似ていますが、より明確になると思います。
競合を解決するには、Git stashを使用して、コミットされていない変更を保存します。次に、リモートリポジトリの変更セットをプルダウンします。次に、ローカルスタッシュをポップして、コミットされていない変更を再適用します。
Eclipse v4.5(火星)で変更を隠します(比較的最近の追加で、以前のEGitにはありませんでした)。これを行います。GitコントロールにあるトップレベルのEclipseプロジェクトを右クリックし、Team、ピックStashes、ピックStash Changes; stashコミットメッセージを要求するダイアログが開きます。
トップレベルプロジェクトでコンテキストメニューを使用する必要があります! Git制御プロジェクト内のディレクトリまたはファイルを右クリックしても、適切なコンテキストメニューが表示されません。