問題タブ [merge-conflict-resolution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - ファイルに残っているHEADマークをGitマージします
Gitを使用してコマンドラインでファイルをマージしようとしましたが、マージが中止されたことを示すエラーメッセージが表示されました。
これで終わりだと思いましたが、ファイルにgitmarkが含まれていることに気付きました。そのようです:
ファイルは私ではなく編集されており、次のように挿入された行が表示されます。
- 記号未満の後のHEAD(
<<<<<<< HEAD
) - 変更されたコードの行
- 等号の文字列(
=======
) - コードの新しいバージョン
- 大なり記号とブランチの名前で始まる別の行(
>>>>>>> gh-pages
)
さらに悪いことに、ファイルの内容が正しくなくなっています。これらのファイルを通常の状態に戻し、gh-branchで行った変更をmasterブランチにマージする方法を知っている人はいますか?
git - ローカルのみのテキスト セグメントが競合ファイルのマーカーの外側に表示される
git によって生成された競合解決ファイルでは、一般的なコードのみがマーカー ('<<<<<<< ours' - '>>>>>>> theirs') の外側に表示されるべきです - 正しいですか?!
ローカル バージョンに挿入したコメントを含む CSS ファイルがあり、競合が発生しました。このコメント セグメントはマーカーの外側にリストされています。
これは、通常のスタイルと diff3 スタイル (ベース セグメントを含む) の両方で発生します。
ビジュアルツール(私の場合はp4merge)を使用すると、上記のテキストセグメントはローカルでのみ表示され、ベースまたはリモートでは表示されません。
またチェック:
どうしたの?!
git - 元の文字列の 2 つの変更されたバージョンをマージする
これは、変更の正確なタイミングがわからない並列変更状況でのバージョン管理に関連しているため、ファイルの 2 つの変更されたバージョンを同時に受け取ると想定しています。問題を単純化します。
T と U という 2 つの変更されたバージョンを持つ文字列 S があります。diff を使用して S と T の違いを確認できます。S 上の T で作られたパッチを PT と呼びましょう。Uについても同じで、PUになります。ここで、PT と PU を 1 つのパッチにマージして、安全な方法で、典型的なプログラミング ライン レベルではなく、「ワード」レベルで PT と PU の間の競合を検出できるようにしたいと考えています。
質問:
1- 2 つのパッチをマージするアルゴリズムはありますか?
2- T と U の間の競合を検出するにはどうすればよいですか?
3- 対立に対処するための共通の方針は何ですか? 私にとっての解決策の 1 つは、競合が発生した場合に、常にバージョンの 1 つ (T など) から変更を選択することです。
私が探していることを行うためのツールはありますか?
git - Gitでの不正なマージ競合解決。それ以降の変更を維持しながら、不正なコミットを再試行しますか?
私は他の1人の開発者と小さなプロジェクトに取り組んでいますが、少し状況があります。私たちは両方ともSVNに精通していますが、Gitは私たち両方にとって新しいものです。
私たちはリポジトリ内の単一のブランチに取り組んでおり、それぞれがプロジェクトのさまざまな側面に取り組んでいます。
何が起こったのかというと、彼は何かをコミットし、次に私は何かをコミットし、競合が発生しました(デザイナーファイルでは、両方の新しいファイルを同じ「スポット」に配置しようとしたため)。動いていない。私はなんとかしてファイルを動作状態にすることができ、悪い競合解決の影響を受けないものをさらに追加して、陽気な方法を続けました。
のように見えます。
A(良い)-> B(悪い)-> C(修正しようとしています)-> D(悪いコミットを元に戻す)-> A-> E(完全に新しいファイル)-> F(完全に新しいファイル)-> G(その他devは大きな問題以来最初にコミットし、より多くの問題と競合をもたらします。)
基本的に私がやりたいのは、Aに戻って、B、E、Fのコミットをマージすることです。この時点で、他の開発者はGをコミットできます。この時点では、BとEの間で何が起こったのかわかりません。問題を解決しようとしたのは私だけだったので、私はむしろそれを捨てたいと思います。ただし、Aに戻ると、最初にBをコミットしたときと同じ競合のプロンプトが表示されません。
神が私を助けてください。
git - ホットフィックスを複数のブランチにマージするGit
私はgitブランチモデルに頭を悩ませようとしてきました。私はいくつかのアイデアについてhttp://nvie.com/posts/a-successful-git-branching-model/を見ていて、Subversionから来て、私が本当に楽しみにしていたことの1つは、1か所で変更を加えることでした。それを必要としたすべてのブランチにマージします。Subversionでは、コードのコピーを大量に作成することになりました。
しかし、私はまだこれを完全には理解していません。これが私が持っている標準的なタイプのワークフローであり、常に競合が発生します。
したがって、マスターは4.0-SNAPSHOTにあり、ブランチは3.1-SNAPSHOTにあります。
ブランチにホットフィックスを作成してトランクに移動したくありません。
私はそれが起こっている理由を理解しており、それは理にかなっています。これを行うためのより良い方法はありますか?
私はチェリーピックについて読みました。これは私がテストして機能しました。
ただし、これを処理する「正しい」方法とは思えません。助言がありますか?
git - git で重複する変更を処理するための推奨事項は?
私は git リポジトリの一部のコードに 2 つの多くの変更を加えましたが、変更ごとに別々のコミットを行いたいと考えています。変更は衝突していませんが、重複しています。つまり、独立した変更を行っており、たまたま同じ行にある場合があります。これは、git add --patch
うまくいかないことを意味します。
このタイプの変更の例としては、コーディング標準に準拠するためにすべてのコンマの後にスペースを追加したり、名前空間関数にプレフィックスとして文字列を付けたりすることがあります。
この種の衝突に対処するスマートな git 関連の方法はありますか、それともゼロから始めて変更の 1 つを元に戻す唯一のオプションですか?
php - Github Merge の問題 (すべての行を表示)
2 つのブランチをマージしようとしていますが、競合を解決しようとしているときに、通常はファイルを開くだけで github が追加されました
これにより、2 つのバージョンでどの特定のコード行が異なるかがわかるので、どの行を保持するかを決定できます。ただし、一部の PHP ファイルをマージすると、正確な違いが表示されません。代わりに、PHP ファイルには私のバージョンが上にあり、すべての行が含まれており、他のバージョンが下にあります。この方法で競合を解決しようとするのは、はるかに困難です。なぜこれが起こっているのかについての提案はありますか? 競合を簡単に解決するにはどうすればよいですか?
php - 再フォーマットされた 2 つの PHP ファイルを GIT でマージする
GIT には、いくつかの PHP ファイルを含む 2 つのブランチがあります。必要なのは、1 つを別のものにマージすることだけです。
残念ながら、IDE で自動再フォーマットされた 2 つの巨大なファイルがあります (スペース、中括弧、改行など)。それらをマージしようとすると、GIT は、人間が手作業で解決することは不可能な、非常に多くの競合を示します。
この投稿で説明されているアプローチを試してみました: http://blog.wuwon.id.au/2010/09/painless-merge-conflict-resolution-in.html しかし、実際の変更を見ることさえできません (base >ローカル、リモート > ローカル)、実際のセマンティックの変更と単なる構文の変更 (多くのコード、何かを見落としやすい) を区別することさえできないためです。
現在、多くのリファクタリングと再フォーマットが必要な古いコードに取り組んでいるため (コード標準 PSR 0-2)、この状況はよくあることです。
この問題に最も効果的に対処する方法を教えてください。ありがとうございました!
git - Gitは競合を表示しておらず、ローカルコピーを上書きしています
gitでの私のルーチンは常に非常に単純です:
ただし、いくつかの不明な理由により、オリジンとの多くの競合にもかかわらず、プルした後、競合は発生せず、許可なくローカルコピーを強制的に更新します。これらの線に沿った何か:「2つのファイルが変更され、2つの挿入(+)、6つの削除(-)」。しかし、私の場合、競合は単純なマージから解決するべきではなく、私の側から手動で競合を解決する必要があります。gitが手動の競合解決を許可しないのはなぜですか?前もって感謝します!注:私のgitコマンドにはいずれもforceオプション-fがありません
git - Git revert は、名前の変更により「私たちによって削除された」競合を作成します
名前が変更されたファイルを変更したコミットを元に戻そうとしています。
変更されたファイルは、以前は と呼ばれていましたがbin/internal/call_parser.rb
、現在は と呼ばlib/call_parser.rb
れています。元に戻そうとした後、自分の状態になりました
私が知る限り、現在のバージョンの lib/call_parser.rb と当時のバージョンのファイル bin/internal/call_parser.br は、git が共有コンテンツを検出できるほど類似している必要があります (git は動作すると聞いています)。ファイル名ではなく、ファイルの内容について)。名前の変更を検出し、 lib/call_parser.rb 内のコンテンツに戻すために、git をよりハードに動作させるにはどうすればよいですか?