web-dev-qa-db-ja.com

GitHubは「自動的にマージできません」?

時々、ヘッドフォークをベースフォークにマージしようとしたとき、またはベースフォークをヘッドフォークにマージしようとすると、GitHubで次のメッセージが表示されます。

「自動的にマージすることはできません。心配する必要はありません。プルリクエストを作成できます。」

競合がある場合、どうすれば競合を表示できますか?

さまざまなコマンドを使用して約10の異なる例を読みましたが、ベース、フォーク、ブランチなどの異なる名前が存在するため、例の名前が私の状況にどのように適用されるかわかりません。

このすべての後、競合を確認し、競合を編集し、マージを続行するために入力できるコマンドがないとは信じられません。ある場合、私はまだそれを見つけていません。

28
user2568374

つまり、上流の所有者がマージの競合を解決することなく、プルリクエストを上流にマージすることはできません。

ここでの解決策は、アップストリームからフェッチを実行してから、アップストリームからのマージの競合を解決することです。この時点で、アップストリームからの競合を理論的に解決してからプルリクエストを作成すると、アップストリームは競合なしでプルリクエストに自動的にマージできます(アップストリームでローカルに解決する間にアップストリームでコミットがなかった場合)競合をマージしてローカル/フォークにマージしてから、プルリクエストを作成します)。

ここで、リモートリポジトリストアの例としてGitHubを使用してみましょう。

OriginalAccount\repo1-これが元のリポジトリであると言う(これを「上流」と呼ぶ)

YourAccount\repo1-これはリポジトリのフォークになります(これは通常「Origin」リモートです)

repo1local-これはリポジトリのローカルコピーです。

YourAccount\repo1からOriginalAccount\repo1(実質的にOriginからupstream)、自動的にマージできないというメッセージが表示されるということは、OriginalAccount\repo1にはコミットがあり、YourAccount\repo1にはないということです(フォークした後にプッシュされる可能性が最も高いコミット)。

ここでの解決策は、upstreamからローカルリポジトリ(OriginalAccount\repo1からローカルリポジトリ)にフェッチし、マージの競合をローカルで解決することです。次に、コミットをYourAccount\repo1にプッシュします。この時点で、自動的にOriginalAccount\repo1にマージできるプルリクエストを作成できるはずです。

注:ほとんどのGitサービスでは、上流の貢献者がマージの競合を解決することを要求するプルリクエストを続行することを妨げることはありませんが、プルリクエストをマージすることをお勧めします競合なし。このように考えると、上流の貢献者があなたの貢献からその仕事をするのではなく、マージ競合解決の仕事をするべきです。

23
Thomas Stringer

あなたのブランチとマスターブランチがあるとしましょう。あなたのブランチからの変更を他の人が見るためにマスターにマージしたいのですが、その間に他の誰かがマスターに競合する変更を行いました(例:PRのマージ)。 PRを作成する前に、masterをブランチにマージする(つまり、他の方法でマージする)ことが便利な場合がよくあります。

コマンドラインでは、次のことができます。

git checkout master
git pull
git checkout your-branch
git merge master

これで、競合のリストを確認できます。 gitから取得したメッセージに従って、競合を解決してください。お気に入りのツールを使用できるので、ずっと簡単です。最後に、コミットしてプッシュします。 PRを再作成すると、競合は発生しません。

13
aaa bbb

これを行う簡単な方法は、Githubを次のように使用することです。

  • Githubの[ブランチの選択]タブで、[ビューのマージ]ボタンをクリックし、ヘッドフォークを左のボックスにドラッグし、ベースフォークを右のボックスにドラッグします。
  • マージブランチボタンをクリックします。
  • 変更タブを選択します。
  • 競合する各ファイルを選択します。 「<<<<<<<」を参照してください。外部ビューアーでファイルを編集してheadforkコードを保持し、そこにコードを追加します。
  • ファイルで保存をクリックします。
  • コミットボタンをクリックします。
  • 同期をクリックします。
  • Git Webサイトに移動し、ベースフォークを再びヘッドフォークにマージしてみてください。

元のメッセージは表示されなくなります

2
user2568374

リポジトリにマージされるコードが既にそこにあるコードと競合する場合、競合が発生します。プルリクエストが受け入れられた場合、それらを解決するのはリポジトリマネージャー次第です。

0
Ben