3

私の難問はこれです。私のチームのメンバーがベンダーコンポーネントを変更しました。その後、このコンポーネントは現在のバージョンにアップグレードされ、チームの変更が上書きされました。

問題の部分には、チームメイトによって大幅な変更が加えられましたが、アップグレードによって最小限の変更が追加されました。私が持っているのはこれです:

---component version 1.0----team change A---team change B---component version 2.0
        (stock)                                              (result of upgrade)

私が欲しいのは、次のようにマージを行うことです。

          ----team change A---team change B
         /                                 \
---component version 1.0                    successful 'merge'
        (stock)                            /
         \------------component version 2.0
                       (result of upgrade)

理論的根拠は、ベンダーのからへの変更、からcomponent version 1.0component version 2.0component version 1.0変更を確認しteam change B、これら2つの変更セットをマージできる場合、チームの変更を適用する方が簡単であるということです。

私が理解しているように、これを行う唯一の方法は、ブランチをにリセットし、team change Bから新しいブランチをチェックアウトして、パッチとしてとcomponent version 1.0の間の差分を適用し、作成されたブランチをマージして、解決をコミットすることです。component version 1.0component version 2.0

私が望んでいるのはgit merge --BASE='component version 1.0' --LOCAL='team change B' --REMOTE='component version 2.0'、マージ解決ツールを使用して結果のファイルがどのように見えるかを判断できるように、基本的にマージをシミュレートする方法があることです。

4

2 に答える 2

1

ブランチをリセットしたくない場合(おそらくこれは共有リポジトリに公開されており、ユーザーが強制更新を処理する必要がない場合)、アップグレードをバージョン2.0に戻し、やり直すことができます。バージョン1.0のインポートからのブランチでバージョン2.0にアップグレードしてから、そのブランチをマージします。

たとえば(ブランチが呼び出され、現在チェックアウトされていると仮定しますmastermaster

# create a commit that is the opposite of HEAD, effectively undoing it
git revert HEAD^
# create a new branch based on the original vendor import
git checkout -b vendor <sha1-of-vendor-1.0-commit>
# import the vendor 2.0 code
git read-tree -u --reset master^
git commit -m "vendor 2.0 code"
# merge in the new vendor code
git checkout master
git merge vendor
于 2012-11-30T03:47:44.893 に答える
0

あなたはこの方法でそれを行うことができるはずです(masterあなたのブランチの名前であると仮定しますが、おそらくそうではありません):

git checkout master
git reset --hard <SHA of team change B>
git checkout -b vendor-upgrade <SHA of component version 1.0>
# replace contents of working directory with component version 2.0
git add <everything that needs to be added>
git commit -m "component version 2.0"
git checkout master
git merge vendor-upgrade

チームの変更の性質によっては、対処すべきマージの競合が発生する可能性があります。vendor-upgradeブランチを終了した後でブランチを削除するか、避けられないバージョン3.0がリリースされたときにそのままにしておくかは、ユーザー次第です。 ..

于 2012-11-29T22:18:16.170 に答える