9

githubにパブリックリポジトリがあり、GitExtensions内でプルリクエストを処理するのに問題があります。私はこれまでに3回行ってきましたが、どれも適切に機能していないか、希望どおりに機能していないと思います。

  1. 19日、YiJiangが作成したプルリクエストを処理しようとしました。GitExtensionsでは、GitExtensions内でプルを実行し、リモートリポジトリに配置し、リモートブランチとしてマスターを選択し、デフォルトとして[リモートブランチを現在のブランチにマージ]のままにしました。[プル]をクリックすると、エラーなしで完了しました。クリーンアップしたことがいくつかあり、それからGitExtensionsをプッシュしました。コミットメッセージが表示されなかったので驚いたので、他に何をすべきかわからなかったので、YiJiangのコミットのURLを投げました。その結果、1つは著者としてのYi Jiangから、もう1つは著者としての私からのコミットのペアとして表示されました。

  2. 19日の後半、マイケルが作成したプルリクエストを処理しようとしました。私が最初の1つを間違えたことはかなり明らかだったので、私は別のオプションを探しました。ここにある最初のコマンドセットを実行しましたが、これはうまく機能したようです。唯一の問題は、GitExtensions内ではなく、コマンドラインを介して実行する必要があることです。

  3. YiJiangからの別のプルリクエスト。前回はGitExtensionsではなくGitBashで行ったようですので、もう一度試してみました。ただし、今回はマージの競合があったため、完了しませんでした。さて、GitExtensionsに移動してマージを実行します。これにより、競合を解決できることがわかっています。そこで、[ブランチのマージ]ダイアログを開き、YiJiangMerge withのマスターブランチを選択して選択しますKeep a single branch line if possible (fast forward)。私は対立を解決し、プッシュを行います。自動的にコミットメッセージが表示されます。これは4つのエントリとして表示され、3つは著者としてのYi Jiangから、1つは著者としての私からのものです。正しくないようです。

だから私の質問は、これをどのように適切に行うべきかということです。別のプルリクエストがあり、正しく処理されていることを確認したいと思います。フォークキューはそれがきれいに適用されないと言っているので、私はマージを行う必要があると予測しています。私が適切にマージしていること、およびブランチとコミットが作業を行った人々に起因していることを確認したいと思います。実行する必要のある編集がある場合、最初にマージ/プッシュを実行してから、単一のブランチだけで2番目のコミットを実行する必要がありますか?これは、マージを解決する必要性にどのように影響しますか?

誰かがGitExtensionsでプルリクエストを正しく処理する正確なプロセスをウォークスルーできますか?

4

1 に答える 1

7

#1は正常に聞こえます-1つ目はプルしたブランチからのコミット、2つ目はマージコミット(実際にはブランチをマージします)です。マージコミットは誰でも行いgit pullます-しかし、のファイルをgit blame見ると、非難の行はすべて元の作成者のものであることがわかります(競合を解決しない限り、マージのコミットは実際には非難の行を追加しません)。

#3も同じ理由で正常に見えます。マージすると、実際にブランチをマージする単一のコミットが追加されます。

#2での私の推測では、プルリクエストは実際は早送りであり、したがってマージコミットは必要ありませんでしたが、#1と#3は早送りではありませんでした(競合なしでマージしたとしても、そうではありませんでした)。あなたの直接の子孫)。 HEAD

基本的には、少し奇妙に思えても、実際には正しくやっていると思います。:)

早送りとマージの違いについてもう少し詳しく説明したい場合は、他の人の言葉を次に示します。

マージと「早送り」について

「早送り」というフレーズが何度か見られることに気付くでしょう。これは「gitmerge」によって実行される特殊な操作であり、線形シーケンスに沿って分岐を進めることができます。これは、最新のコミットと同じコミットの上に直接ビルドされる変更をプルするたびに発生します。つまり、複数のリポジトリで並行して作成された分岐や同時コミットはありませんでした。並列コミットがあった場合、「git merge」は実際には、2つのコミットを結び付けるための新しいマージコミットを導入します。

非早送りマージが発生すると、競合が発生する可能性が常にあります。この場合、「git merge」はファイルに競合マーカーを残し、競合を解決するように指示します。終了したら、「git commit -a」を発行して、マージコミットを作成します。

http://cworth.org/hgbook-git/tour/から)

編集

Githubの実際のリポジトリを見に行きました。最後の2つのプル(#2と#3)は適切に機能し、実行すべきことを実行したようです。#2の場合は早送りし、#3でマージ(マージコミットを追加)します。

#1で何が起こったのかよくわかりません-どういうわけか、変更の一部があなたによって別のコミットに入れられたようです?当時実際に何が行われていたかを見ることができなければ、本当によくわかりませんでした。おそらく、コミットされていない変更があり、気付かずにコミットしたのでしょうか。

于 2010-10-22T04:16:57.670 に答える