3

私は他の誰かのレポのようなフォークを持っていて、私のマスターブランチにいくつかの変更をコミットし、私のフォークにプッシュしました:

[upstream/master] --- C1 --- C2[origin/master]

次に、自分の変更C1C2ブランチの一部にすることを決定しfeature_branch1masterブランチを に戻すことにしましたupstream/master

[upstream/master === origin/master] --- C1 --- C2[origin/feature_branch1]

私はこれを達成しました:

git checkout C2
git branch -m feature_branch1
git checkout upstream/master
git branch -m master

(それが私が意図した方法であったかどうかはわかりません)。

master次に、次のようにブランチからいくつかの追加機能を追加しました。

                                     C1 --- C2 [origin/feature_branch1]
                                   / 
[upstream/master === origin/master]
                                   \ 
                                     C1' --- C2' [origin/feature_branch2]

( git checkout master; git checkout -b feature_branch2; <changes>; <commits>)

今、私はリモートにプッシュしようとしています。プッシュfeature_branch1してfeature_branch2成功しましたgit push origin feature_branchXが ( )、マスターをプッシュしようとすると、早送りできず、履歴が失われるというエラーが表示されます。

私はこれを理解しています - 私はそれが私が失うことを望んでおらずC1、分岐点C2master戻ることを望んでいないと思います. しかし、私は保存C1C2feature_branch1すでに入っているので、それらを失うことはありません.

上記の図を実現する方法はありますか?

4

2 に答える 2

1

--forceプッシュにフラグを追加すると、成功するはずです。

履歴の書き換えは、いったんプッシュされると悪いことと見なされます。なぜなら、他の誰かがあなたのマスターを複製し、あなたが削除しようとしているコミットをプルした場合、存在しない参照があるため問題が発生するからです。

于 2012-10-05T01:15:38.770 に答える
1

の後、ブランチをリモート マスターと同じ状態にリセットするgit checkout masterことができます。git reset --hard origin/master

于 2012-10-05T01:08:42.373 に答える