2

Android のカーネルを から にアップグレードする必要があり<REV1>ます<REV2>

<REV1>2との間のパッチのリストを生成しようとしています<REV2>。そのため、コマンドを使用してパッチのリストを取得するために、両方が同じブランチにあるかどうかを確認しました

$git merge-base 69ecc39b5b4ea78de1f25bf9cbe7c236a91f764c af5ddc99f3d0e7c2406d5bf64763eef7d0843127

それらが同じブランチにないことがわかりました。<REV1><REV2>c4b646ff80f558010ee486421ee1b718db1a3193の最初の共通祖先を取得したため

<REV2>そこで、共通の祖先と使用の間のパッチのリストを生成しようとしました

$git format-patch c4b646ff80f558010ee486421ee1b718db1a3193..af5ddc99f3d0e7c2406d5bf64763eef7d0843127 -o patch_JUN15_NOV26

今、私は新しいブランチを作成し、それを共通の祖先コミットにリセットしました

$git reset --hard c4b646ff80f558010ee486421ee1b718db1a319

今、このブランチのパッチのリスト全体にパッチを当てようとしました:

$git am --ignore-whitespace --reject ../../jb/kernel/patch_JUN15_APR10/*

しかし、 patchlist の最初のパッチの競合を解決するように求める patch failed エラーが発生しました。しかし、私は対立がないことを期待しています。<REV1><REV2>が同じブランチにある場合、 format-patch から生成されたパッチ リストは<REV1>競合することなくスムーズに適用できると思います。

私の仮定は正しいですか?私はそれを正しい方法でやっていますか?

4

1 に答える 1

1

まっすぐな git の答え、おそらく間違っています:

に新しいブランチmerge-branchを作成し、先祖よりも新しい (つまり にない) 変更を の上REV2にリベースします。REV2REV1REV1

git checkout -b merge-branch <rev2-hash>
git rebase <ancestor-hash> --onto <rev1-hash>
             ^                        ^
             |                         \
             |                          `play them on top of this
              `take commits from this
               far back in the current branch

      ... and plant the result as the replacement for the current branch

全体像:

上記の答えがおそらく間違っている理由は、多くの人と同じように、あなたが製品のカーネルのカスタマイズを維持している小さな組織であり、新しいカーネルにアップグレードしたいと考えているからです。に基づいてカスタマイズしましたREV1が、その作業を に移動したいと考えていますREV2。その場合、 と の間のマージを処理することREV1REV2完全に間違った問題です。これはすでに上流で処理されています。Upstream は 2 つの完全に優れたカーネルを生成しました:REV1REV2. これらのカーネルは実際にはブランチであるためREV1、 の直接の祖先ではありません。REV2ただし、これらの変更管理の詳細に対処する必要はありません。あなたがする必要があるのは、行われた変更をリベースすることだけですREV1の上にREV2

ourbranchから発芽したカーネル開発があるとしますREV1:

ourbranchまず、呼び出されたのクローンを作成しますourbranch-REV2

git checkout -b ourbranch-REV2 ourbranch

次に、カーネルの上で、ourbranchそれ以降の新しい変更(つまり、ローカルの変更のみ) をリベースします。REV1REV2

git rebase REV1 --onto REV2

すべてがうまくいけば、カーネル上で開発されたかのように履歴ourbranch-REV2が書き換えられます。ourbranchREV2

于 2014-12-20T06:03:09.683 に答える