1

私が行ったいくつかの作業を振り返ってみると、何が作業されているかを本当にわかりにくくする早送りコミットがあったので、そのコミットを独自のブランチに移動したいと思います。これが私の現在の状況です:

A--B--C--D

そして、移動したいコミットは C だけだとしましょう。Cにも(FFコミットから)独自のブランチがあります(branch2)。私はそれが次のようになりたい:

A--B--------C2--D
    \      / 
     \    /
      C--/

したがって、C は on でbranch2、C2 はマージ コミットであり、A、B、および D はすべて onmasterです。

ここにいくつかの追加情報があります:

$ git reflog show branch2
245c52c branch2@{0}: commit: C
7c2a064 branch2@{1}: branch: Created from HEAD

$ git reflog show master
c0a8aff master@{0}: commit: D
244c52c master@{1}: merge branch2: Fast-forward
8a93b2f master@{2}: commit: B
fe872d8 master@{3}: commit: A
4

1 に答える 1

2

あなたが持っている場合:

 A--B--C--D (master)
       |
   (branch2)

マージをリセットmasterしてやり直すことができます(非FFの方法で)チェリーピック D(またはD が実際に複数のコミットの場合はrebase )

git checkout master
git branch tmp # mark D if you need to
git reset --hard B
git merge --no-ff branch2

 A--B----C2
     \   /
      --C (branch2)
         \
          --D (tmp)

それで:

git cherry-pick D

D が実際に複数のコミットで構成されている場合、' tmp' ブランチが役に立ちます。

git rebase --onto master branch2 tmp

これにより、branch2 (C を除く) の後のすべてのコミットが再生され、 ( )の上にtmpある HEAD (つまり)まで再生されます。DmasterC2

于 2016-08-07T11:27:37.113 に答える