2017-07-12 6 views
1

developチームがmasterに時折PRしています。数ヶ月前に、我々は広報を行い、masterdevelopの変更を得るためにスカッシュマージ(効果がどうなるかについての知識の欠如)を使用しました。このコミットがプッシュされました。 チームはdevelopで数ヶ月間作業を続けており、現在はdevelopに400以上のコミットを行っています。比較によると、masterにはdevelopにない1つのコミットがあります:スカッシュマージ。誤ってスカッシュマージを行った後、マスターブランチをきれいにします。

ABCのスカッシュマージさ
---X---------------S <-- master 
/\    
-  ---A---B---C-----D1---D2 ... Dn <-- develop 

S

は、ここで私は私達の木がどのように見えるかわかるものです。

developmaster(あるいはその逆)にマージしようとすると、両方のブランチに変更が加えられているため(同じ変更から始めるにしても)、多くの競合が発生します。

これを整理するにはどうすればよいでしょうか?スカッシュマージを元に戻して「良い」状態に戻す方法はありますか(例:X)?

答えて

1

考える:

あなたが行うことができ
-M1--X---------------S <-- master 
    /\    
-D1  ---A---B---C-- <-- develop 

  • スカッシュ
  • がマージを実行する前にチェックアウトがスカッシュの後に起こった
  • チェリーピックのコミットを退治せずに、コミット

あなたは今持っているものと同じ内容になるはずですが、スカッシュがマージに置き換えられました。この後

git checkout -b master-new M1 
git merge D1 
git cherry-pick S 

master-newがよさそうだならば、あなたは、バックアップmasterをできたとmaster-newと交換してください:ある

+0

私の例では明らかではないかもしれません:マスターで潰れたマージの後に変更はありませんでした。チェリーピッキングの必要はありません。私は間違っている)。縮小されたマージは、マスター上の最後のコミットです。それを取り除くことは可能ですか? –

+0

@AndrasGaal確かに、スカッシュの後にコミットがなければ、チェリーピックのステップは必要ありません。そしてはい、あなたは*スカッシュを取り除くことができますが、私は別の支店で作業することをお勧めします。したがって、スカッシュを削除する代わりに、スカッシュ前のリビジョンから新しいブランチを作成し、そこから作業します。 – janos

関連する問題