1

私たちは複雑な状況にあります。リポジトリの王様は次のとおりです。

        C1      C4              C5
devel   *---*---*---*-----------*---------
              \_____
                    \    C2    C3      
fix-ie  *--*---------*----*----*-------*---
                     M1                 \___
                                            \
testing *----*-------------------------------*---
                                             M2

ご覧のとおり、devel は fix-ie ブランチ内にマージされます。

問題は、"testing" ブランチに "devel" コミットを含めるべきではない (C1 は必要ない) ことですが、"testing" で修正をマージする必要があります。つまり、C2 および C3 コミットのみを含める必要があります。

私が行った場合:

git checkout testing
git merge fix-ie

M1 マージをテスト ブランチに配置します... したがって、C1 コミットはテスト ブランチで見つかります。それは私たちが望んでいることではありません。

これを回避するには?

例を簡略化したことを思い出してください。fix-ie ブランチと devel ブランチには、多くのマージ、多くのコミットがあります。

ありがとう :)

4

2 に答える 2

0

fix-ieこれを行う 1 つの方法は、ブランチからマージ コミットを除外する別のブランチを作成することですdevel。その後、そのブランチを自分のブランチにマージできますtesting

を使用して reflog を検索し、無視したいブランチgit reflog show -allからマージ コミットを見つけることができます。devel

于 2012-07-04T11:27:59.577 に答える
0

解決策を見つけたようです。

たとえば、「123abc」という名前の最初のマージ SHA を取得します。できます:

git rev-list --no-merges --reverse --topo-order debug-ie ^123abc

次に、各行はコミットですが、リストにマージはありません。

だから私ができる方法は次のとおりです。

for SHA in $(git rev-list --no-merges --reverse --topo-order debug-ie ^123abc); do
    git cherry-pick $SHA
done

私が間違っていたら教えてください...でもそれはいい考えのようです.

于 2012-07-04T12:57:44.367 に答える