17

GitHubの一般的なワークフローでgitの問題が発生し続けています。

  1. リポジトリをフォークします
  2. いくつかの変更をコミットします
  3. アップストリームリポジトリにプルリクエストを行います
  4. 上流の開発者が私のプルリクエストに座っている間、親指をいじります。
  5. アップストリーム開発者がリポジトリに変更を加える
  6. 彼らはあなたのプルリクエストを見ますが、彼らのツリーの変更のためにそれはもはやきれいに適用されないので、彼らはあなたにあなたのプルリクエストを更新するように頼みます。
  7. アップストリームからリポジトリに変更をフェッチしてマージし、競合を解決し、変更をコミットします
  8. プルリクエストのコミットをリベースして、きちんと整理します。

ここで問題が発生します。プルリクエストには、アップストリーム開発者自身の変更を含む、ステップ2と7の間に発生したすべての変更が含まれています。最近の例では、これにより10行のプル要求が12,000行を超えて拡張されました。

元のコミットを、プルリクエストに変更を加えずに、アップストリームリポジトリの新しいバージョンに再適用するにはどうすればよいですか?

4

2 に答える 2

16

これを変える

7) アップストリームからレポに変更をフェッチしてマージし、競合を解決し、変更をコミットします。

8) プル リクエストでコミットをリベースして、整理整頓します。

リポジトリをアップストリームにリベースして、きれいに整頓します。

featureからブランチをフォークしたと仮定しupstream/master、安全のために一時ブランチを使用します。feature-rebase問題が発生した場合は、ブランチを削除して最初からやり直してください。

git checkout feature
git checkout -b feature-rebase
git rebase -i upstream/master

upstream/masterこれにより、今すぐフォークしたかのように、の上でコミットが再生されます。すべてが良さそうに見えたら、古いfeatureブランチをリベースされたバージョンに置き換えます。

git branch -m feature feature-old
git branch -m feature-rebase feature
git branch -d feature-old
git checkout feature
git push -f origin feature
于 2013-01-08T21:11:05.103 に答える
2

あなたがすでにこれを行っている場合、私はあなたの質問から補うことはできませんが、プルリクエストのコミットを行う場合、最も簡単な方法は別のブランチを作成することです.

そうすれば、プル リクエストにどのコミットを含めるかを簡単に定義でき、後でプル リクエストを更新して新しい変更を含めることもできます。

その後、アップストリームから新しい変更を組み込みたい場合は、それらをフェッチして、トピック ブランチをリベースできます。

github でプル リクエストを作成するときに、このブランチを選択すると、正しいコミットが確実にプルされます。

その後、このブランチにプッシュするたびに (-f をプッシュしても)、プル リクエストが自動的に更新されます。

于 2012-11-26T08:26:40.017 に答える