2011-12-14 12 views
3

私はかなり混乱してしまった。Git:復帰前の分岐後のマージ変更

私は、機能を大幅に減らした再構成の変更をmasterにコミットしました。

この変更が適用されたプログラムを使用することはできないため、問題が発生しましたが、私は既に関連性のない改善をmasterにコミットしていました。

だから、私は元に戻す前をコミットオフベース(restructure言う)masterにリストラの変更を元に戻して、新しいブランチを開始しました。

問題は今度はmasterにさらに価値のあるコミットがあり、開発を容易にするためにrestructureに引き込みたいということです。しかし、git mergeは、最初のリストラの復帰を適用しようとします - おっと!

私は今何をすべきか分かりませんし、悪い決断が今や後でmasterへのマージを大幅に複雑にする可能性があります。

さらに複雑になると、restructureブランチがプッシュされました。しかし、私はgit push --forceを使用する必要はありませんが、このすべての混乱をクリアします。リポジトリを引っ張ってきた人はほんのわずかです。

私はこれまで真の解決策を尋ねた質問への答えであることを失敗する可能性がありますことを受け入れる - これは間違いなくXY Problemシナリオのように感じている - しかし、私はタイトルに何かを入れていた:)

注意:私はこれがすべて悪いgitのワークフローの症状であることを理解しています。これは将来もっとうまくやることができるほどのインセンティブです。しかし、私は間違ったことを遡って行うことはできないので、私の問題は残ります。

答えて

4

、あなただけのgit rebase -iマスターで、自身をコミットするのではなく元に戻すリストラを削除しrestructureブランチを作成することができますあなた自身から(とにかくあなたが合併するつもりであるので)それ自身で作業してください。

+1

ありがとう!これは完全に機能しました。 'マスター 'は実際にプッシュされていましたが、私は単一の' --force'が今この問題を引き起こしていた問題よりも破壊的ではないと考えています... – ehird

3

git cherry-pickを使用して、masterから新しいブランチにコミットするだけのコミットを選ぶことができます。それは、指定されたハッシュタグの変更を引き継ぐだけです。 git-cherry-pickのmanページを見てください。あなたがマスターをプッシュしていないので(?)、あなたが持っているにもプッシュを強制し、歴史を書き換えるしても大丈夫であっても、

+0

ええ、私は以前にこれを試していましたが、構造変更に適切な変更を加えましたが、物事をマスターに戻すことを試みた後に(ローカルで、チェリーピッキングが何かが壊れていた)、すべては以前よりもさらに崩れているようでした。確かに、これはかなり間違いなく、質問されたものとは別の問題です。 – ehird

+0

マスターから良いコミットを選んだら、再構築の前にコミットに戻ってマスター(復帰しない)をリセットしてください。マスターをプッシュしない限り、最後の良好なものの後にすべてのコミットを安全に削除することができます。マスターの先端が再構成の開始に対応するので、それを一緒にマージすると、あなたが望むものを得ることができます。 – tpg2114

+0

削除を開始する前に、このリポジトリをバックアップすることは言うまでもありません:) – tpg2114