問題タブ [git-merge-conflict]
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 - Git Cherry Pick の競合について
最近、SVN から GIT に切り替えましたが、以前のワークフローの変換に問題があります。ほとんどすべてが機能しますが、今日は奇妙なチェリーピックの競合が発生しました。
競合を解決することはできますが、これがどこから来たのかを知りたいです。私の理解では、この状況では競合が発生するべきではないからです。
設定
私たちのリポジトリには、master
開発するブランチがあります。年に 4 回、新しいバージョンをリリースします。に分岐master
しRelease-x
、これはテスト後に出荷されます。
同時に複数のリリース バージョンを運用しています。バグが見つかった場合は、すべての (サポートされている) リリース ブランチで修正する必要があります。そのため、タグを使用してさまざまなリリースを識別する単一のリリース ブランチは、有効なワークフローではありません。
したがって、現在、次のブランチがあります: master
、Release-15Q1
、Release-15Q2
およびRelease-15Q3
たとえば、でバグの原因となるタイプミスを見つけたとmaster
します。それを修正してcherry-pick
からRelease-15Q1
、Release-15Q2
Release-15Q3
だから、今私が直面している紛争に:
ファイルは、分岐後properties.dat
に で変更されましたmaster
Release-15Q3
Properties.dat ( Release-15Q3
)
Properties.dat ( master
)
開発は進みました... すべて順調です。その後、バグを無効にするためにファイルに追加のプロパティを追加する必要があるバグに気付きました。
Properties.dat ( master
)
この修正コミットは、他の 3 つのブランチにも適用する必要があります。そこで、各ブランチに移動して、cherry-pick コマンドを使用します。
これにより、最初の 3 行で競合が発生しますが、その理由がよくわかりません。
チェリーピッキングでは、その特定のコミットのみを再生すると想定していたので、適切な場所にallowBug=false行を追加するだけです。ブランチをマージしていないので、他の変更が行われたかどうかは問題ではありませんよね?
なぜこれが競合を引き起こしているのですか?これらの他の変更は無視されるべきではありませんか?
git - 個々の親からの git diff を表示する
たとえば、マージの競合が表示され、なんとか修正できましたが、解決済みとしてマークされていません (つまり、git add
競合しているファイルをまだ処理していません)。この時点でgit diff
、結果のファイルが各親とどのように異なるかを、結合された diff 形式で表示できます。
これまでのところすべて順調です。ここで、結果ファイルが個々の親とどのように異なるかを個別に調べたいと思いました。確かに、2 つの親 (cherry-pick、rebase など) が関与するマージ競合の場合、 git diff --ours
orを使用できますgit diff --theirs
が、これをより多くの親に拡張するにはどうすればよいでしょうか?
つまり、3 人の親から競合が発生した場合、各親との個別の差分を表示することは可能ですか?
--ours
また、私の発見--theirs
はかなり偶然でした。差分コンテキストで文書化された使用法を見つけることができませんでした。
git - git pull origin branch は、クリーンな現在の master ブランチでのマージを望んでいます
私は完全にきれいなマスターブランチにいます(ただし、gitは、origin / masterよりも14コミット進んでいることを示しています)。オリジン (Eagle) から別のブランチを取得しようとすると、git からいくつかのファイルをマージするように求められます。
これは私が期待するものではありません: ブランチをプルするときは、リモート ブランチをインポートし、現在の HEAD をそのままにしておく必要があり、マージの競合に悩まされることはありません。私の認識では、2 つの支部は別々に住んでいますが、衝突することなく互いに平和に暮らしています。しかし、この認識はもはや当てはまりません。
これらの競合の原因と、マージせずに 2 つの異なるブランチを復元する方法は?
コマンドラインでの git セッションのトランスクリプトの下。
git - 選択したファイルの競合を無視するために Git マージを取得するにはどうすればよいですか?
フィーチャー ブランチをマスター ブランチにマージしており、マスター ブランチ内のファイルの一部を上書きしたいと考えています。上書きしたいファイルには通常、テキスト構成とテキストとしてエンコードされたバイナリデータが含まれているため、問題が発生する可能性があり、とにかく気にしません。これらは、マスター内のものを置き換えることを目的としています。
競合を無視して上書きするにはどうすればよいですか?
git - 「マスターの背後にある 1 つのコミット」を解決するにはどうすればよいですか?
プッシュした後、リモートリポジトリで次のメッセージが表示されました。
マスターの後ろに 1 コミット。
このマージには、コミットする前に解決する必要がある競合があります。
これらの変更を TA20footerLast に手動でマージするには、次のコマンドを実行します。
git checkout 7c891f50c557
注: これにより、切り離された頭が作成されます。
git merge remotes/origin/master
ruby-on-rails - Workspace.xml との Git マージの競合
Rails プロジェクトを Heroku にプッシュしようとしていますが、現時点では Git で何もできません。これまでに行ったことは次のとおりです。
git push heroku
heroku ブランチが私のローカル ブランチよりも「進んでいた」ため、失敗しました。- 引っ張ったところ、 と競合がありました
.idea/workspace.xml
。そのファイルが何であるかはわかりませんでしたが、巨大で、Git があらゆる種類の文字化けを書き込んでいました。競合を手動で「解決」するには多すぎます。 - そのファイルをgit-ignoringすることについて話しているstackoverflowの投稿をいくつか見たので(おそらくRubyMineのIDEファイルか何か?)、競合を避けるためにファイルを移動しようとしました
- 私は走った
git add -A
(また試しgit add .
てみたgit add
) git commit --amend
「あなたはマージの途中です」という理由で失敗しますgit merge --abort
「追跡されていない作業ツリー ファイル '.idea/workspace.xml' がマージによって上書きされるため失敗します (ファイルが移動されたにもかかわらず)git reset --merge
同じ理由で失敗します。
Git を再び機能させるにはどうすればよいですか?
git - 競合を解決した後、git がすべてのファイルをマージしない
これが既知の問題かどうかはわかりませんが、何が起こったのか見てみましょう。
マスターから機能ブランチを作成し、機能の作業を開始します
マスターは、自分の機能ブランチにまだない他の機能で更新されています。
フィーチャー ブランチの処理が完了し、master をフィーチャー ブランチにマージして、master へのプル リクエストを作成する前に問題を解決します。また、マスターをチェックアウトし、オリジンから git pull してマスターの最新のコピーを取得します。
git merge master
機能ブランチで実行すると、マージの競合が発生します。
これらの競合を解決し、すべて (競合ファイルと新しい/変更されたファイル) を追加してからコミットします。git merge master
機能ブランチで再度実行すると、Already up-to-date.
今私の問題は、一部のファイルがマスターからマージされていないことです。マスターには明らかに変更されたファイルがありますが、マージで取得されませんでした。そのため、プルリクエストを行うと、触れたことのない特定のファイルを変更し、マスターの変更を元に戻そうとしています。
私が間違っていたことと、この問題を解決する方法を誰か教えてもらえますか?