Iちょうど最近bloggedに表示されます:
はどのように我々は、最新のこの機能ブランチを維持していますか?最新のアップストリームコミットを簡単にマージすることは簡単ですが、マージコミットを作成しないようにしたいと思います。これは、アップストリームにプッシュされても認識されないためです。彼らは新しい親を得る)。これらのマージされたコミットは、あなたのGithubプルリクエストに反映されます(プルリクエストを発行した後であっても)。マージするのではなく、リベースする:
git co devel #devel is ansible's HEAD aka "master" branch
git pull --rebase upstream devel
git co user-non-unique
git rebase devel
両方リベースのオプションとのgitにコマンドをリベースすると、きれいなあなたのツリーを維持し、コミットをマージがなくなります。 しかし、それらはリベースされている新しいコミットハッシュを持っている最初のコミット(あなたが最初のプルリクエストを発行した相手)であり、リモートgithubリポジトリブランチに残っている元のハッシュとは異なります。
ここで、これらのアップデートを個人のGithubフィーチャーブランチにプッシュすると、両方のブランチが異なるため、ここでは失敗します。コミットハッシュが異なるため、ローカルブランチツリーとリモートブランチツリーは「同期していません。 Gitは最初にgit pull --rebaseを実行してから再度プッシュするように指示しますが、これは簡単な早送りプッシュではなく、歴史が書き直されてしまいます。それをしないでください!
ここで問題となっているのは、最初に変更されたコミットを最初にフェッチし、それらがローカルブランチの上にマージされるということです。同期外の状態のため、このプルはきれいには適用されません。あなたはコミットが2回現れるb0rken履歴を取得します。これらのすべてをgithubフィーチャーブランチにプッシュすると、それらの変更は元のプルリクエストに反映され、非常に醜いものになります。
AFAIK、これには完全にクリーンな解決策はありません。Gitのプッシュを1として
(1):私が見つけた最良の解決策は、(実際には非高速orwardの更新を強制的に)あなたのgithubのブランチにローカルのブランチを押し強制することです
Update the origin repository’s remote branch with local branch, allowing non-fast-forward updates. This can leave unreferenced commits dangling in the origin repository.
だから、ドン
git push svg +user-non-unique
か::
git push svg user-non-unique --force
をこれが実際にはっきりoverwritます「トンは、ちょうどこのようにプッシュを強制する、引っ張りますあなたのローカルブランチのすべてを使ってリモートブランチを作成します。リモートストリームにある(そして失敗を引き起こした)コミットは残っていますが、git-gc(1)によって最終的に削除されるコミットが絡んでいます。大きな問題ではない。
私が言ったように、これはAFAICSの最もクリーンな解決策です。これの欠点は、あなたのPRが最新のコミットで更新され、後日取得され、PRのコメント履歴に同期外れて表示される可能性があることです。大きな問題はありませんが、混乱する可能性があります。
ここに来ると、シナリオに合ったものが見つかるかもしれません:http://stackoverflow.com/questions/9790448/how-to-update-a-pull-request – AaronLS
このバージョンの質問/回答はもっと明確になりました: http://stackoverflow.com/questions/7947322/preferred-github-workflow-for-updating-a-pull-request-after-code-review?rq=1 –